Опитвам се да позволя на потребителите от този клас да дефинират елементите на контекста на менюто, тъй като в различните случаи на използване ще трябва да изложим различни елементи от контекстното меню.
Източник 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>
Какво трябва да добавя към модела за управление или преглед, за да покажа елементите на контекстното меню, така че те да могат да се дефинират там, където използвам контрола?
Отговори:
1 за отговор № 1Може да сте свързали ItemsSource на ContextMenu с собственост на колекцията във вашия ViewModel.
Ако приемем, че всички ваши ViewModels наследяват от определен интерфейс (ваш собствен), те биха могли да въведат getter в тази колекция и ако има или не елементи (за деактивиране на ContextMenu).
За всичко друго ще трябва да сте по-конкретни.
0 за отговор № 2
Разбира се, аз разработих фиксирана около 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>