我想要一个文本菜单绑定到命令的列表。
<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
称为?
我会用一个小的“视图模式”来保存信息这样的命令。
class ContextAction : INotifyPropertyChanged
{
public string Name;
public ICommand Action;
public Brush Icon;
}
让您的视图模型中的集合,其应该得到的背景下操作,如
ObservableCollection<ContextAction> Actions {get;set;}
和简单的这个集合绑定到你的文本菜单。
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding Actions}/>
ItemTemplate中的文本菜单项目现在可以访问名字,你可能需要的命令和其他任何。 因此,它会调用与所拥有的元素,而不是用行动本身行动的命令可能是改变CommandParameter藏汉有用。
我使用的是这样的:
public class ContextMenuVM
{
public string Displayname {get;set;}
public ICommand MyContextMenuCommand {get;set;}
}
在您的ContextMenu的DataContext:
public ObservableCollection<ContextMenuVM> MyCommandList {get;set;}
在您的XAML
<ContextMenu ItemsSource="{Binding MyCommandList}">
<ContextMenu.ItemTemplate >
<DataTemplate DataType="MenuItem">
<MenuItem Header="{Binding Displayname}" Command="{Binding MyContextMenuCommand}"></MenuItem>
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
其有没有书面的IDE,所以也许有些语法错误
的下面@blindmils溶液的改进的版本XAML:
<ContextMenu ItemsSource="{Binding MyCommandList}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Displayname}" />
<Setter Property="Command" Value="{Binding MyContextMenuCommand }" />
</Style>
</ContextMenu.ItemContainerStyle>
</ContextMenu>