我想将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/

10-11 23:31
查看更多