我想将contextmenu绑定(bind)到命令列表。
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding ItemContextCommands, Converter={StaticResource commandToStringConverter}}">
<ContextMenu.ItemTemplate >
<DataTemplate DataType="MenuItem">
<MenuItem Command="{Binding}"></MenuItem>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
commandToStringConverter
只是将命令列表转换为在列表中的每个命令上调用ToString()
的字符串列表。如何实现每个
Command
中的MenuItem
被调用? 最佳答案
我将使用一个小的“ View 模型”来保存有关此命令的信息。
class ContextAction : INotifyPropertyChanged
{
public string Name;
public ICommand Action;
public Brush Icon;
}
在您的 View 模型内创建一个集合,该集合应该获得上下文操作,例如
ObservableCollection<ContextAction> Actions {get;set;}
并将该集合绑定(bind)到您的
ContextMenu
即可。<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding Actions}" />
现在,上下文菜单项的
ItemTemplate
可以访问名称,命令以及您可能需要的其他任何内容。更改CommandParameter
可能也很有用,这样它将使用 Action 拥有元素而不是 Action 本身来调用命令。关于c# - MVVM中的ContextMenu,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15566824/