WPF:将命令添加到通过绑定菜单项自动生成
Posted
技术标签:
【中文标题】WPF:将命令添加到通过绑定菜单项自动生成【英文标题】:WPF: Add a command to auto-generated by binding menu items 【发布时间】:2012-12-15 10:45:39 【问题描述】:使用MVVM。我创建了单独的菜单“最近的文件”,它从绑定中获取其项目。看起来是这样的:
<MenuItem Header="_Recent files" ItemsSource="Binding RecentFiles, Converter=StaticResource RecentFilesToListOfStringsConverter, Mode=OneWay" >
</MenuItem>
现在,我想将命令添加到每个自动生成的项目中,它应该将路径作为命令参数并通过单击执行导入文件操作。
您能否建议如何以 MVVM 方式完成?
【问题讨论】:
【参考方案1】:再次,我自己找到了解决方案。我试图以错误的方式输入命令,如下所示,但它不起作用:
<MenuItem Header="_Recent files" ItemsSource="Binding RecentFiles, Converter=StaticResource RecentFilesToListOfStringsConverter, Mode=OneWay" >
<MenuItem.ItemContainerStyle>
<Style TargetType="x:Type MenuItem">
<Setter Property="Command" Value="Binding ImportRecentItemCommand" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
这是正确的方法。还是不明白它是怎么工作的,必须深入学习WPF!
<MenuItem Header="_Recent files" ItemsSource="Binding RecentFiles, Converter=StaticResource RecentFilesToListOfStringsConverter, Mode=OneWay" >
<MenuItem.ItemContainerStyle>
<Style TargetType="x:Type MenuItem">
<Setter Property="Command" Value="Binding DataContext.ImportRecentItemCommand, RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type MenuItem, AncestorLevel=1" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
编辑:最终版本
XAML:
<MenuItem Header="_Recent files" ItemsSource="Binding RecentFiles, Converter=StaticResource RecentFilesToListOfStringsConverter, Mode=OneWay" >
<MenuItem.ItemContainerStyle>
<Style TargetType="x:Type MenuItem">
<Setter Property="Command" Value="Binding DataContext.ImportRecentItemCommand, RelativeSource=RelativeSource Mode=FindAncestor, AncestorType=x:Type MenuItem, AncestorLevel=1" />
<Setter Property="CommandParameter" Value="Binding" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
ViewModel:使用了 MVVM Light Toolkit,RelayCommand 从那里开始:
private ICommand _importRecentItemCommand;
public ICommand ImportRecentItemCommand
get return _importRecentItemCommand ?? (_importRecentItemCommand = new RelayCommand<object>(ImportRecentItemCommandExecuted));
private void ImportRecentItemCommandExecuted(object parameter)
MessageBox.Show(parameter.ToString());
享受
【讨论】:
以上是关于WPF:将命令添加到通过绑定菜单项自动生成的主要内容,如果未能解决你的问题,请参考以下文章
WPF:将 ListBox ContextMenu 的命令参数绑定到 ListBox 的选定项