允许用户定义上下文菜单项

时间:2017-05-01 12:47:28

标签: wpf

我正在尝试允许此类的用户定义菜单上下文项,因为在不同的用例中我们需要公开不同的上下文菜单项。

来源XAML

<Grid>
    <DataGrid>
        <DataGrid.Columns>
            ...
        </DataGrid.Columns>
        <DataGrid.ContextMenu>
            <ContextMenu
               Visibility="{Binding SelectedItem, Converter={SomeConverter}}">
            </ContextMenu>
        </DataGrid.ContextMenu>
    </DataGrid>
</Grid>

我想如何使用它:

<x:MyCollectionControl>
    <MenuItems>
        <MenuItem Header="Do Something"
                Visibility="Collapsed" />
        <MenuItem Header="Do Something Else"
                Visibility="{Binding SomeCondition}" />
    </MenuItems>
</x:MyCollectionControl>

我需要添加到控件或视图模型以显示上下文菜单项,以便可以在我使用控件的位置定义它们?

2 个答案:

答案 0 :(得分:1)

您可以将ContextMenu的ItemsSource绑定到ViewModel中的集合属性。

假设您的所有ViewModel都从某个接口(您自己的接口)继承,他们可以实现此集合的getter以及是否有项目(用于禁用ContextMenu)。

对于其他任何事情,你必须更具体。

答案 1 :(得分:0)

当然,我在发布此消息后约5分钟就制定了修复程序。

在我的控制代码中添加了以下内容。

  [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
  public ItemCollection MenuItems => MyCollectionDataGrid.ContextMenu?.Items;

并用它来引用控件。

<trade1:MyCollectionControl x:Name="SomeDataGrid">
    <trade1:MyCollectionControl.MenuItems>
        <MenuItem Header="Do Something"
                Visibility="Collapsed" />
        <MenuItem Header="Do Something Else"
                Visibility="{Binding SomeCondition}" />
    </trade1:MyCollectionControl.MenuItems>
</trade1:MyCollectionControl>