我正在尝试允许此类的用户定义菜单上下文项,因为在不同的用例中我们需要公开不同的上下文菜单项。
来源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>
我需要添加到控件或视图模型以显示上下文菜单项,以便可以在我使用控件的位置定义它们?
答案 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>