/ / Позволява на потребителя да дефинира елементи от контекстното меню - wpf

Позволява на потребителя да дефинира елементи от контекстното меню - 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>

Какво трябва да добавя към модела за управление или преглед, за да покажа елементите на контекстното меню, така че те да могат да се дефинират там, където използвам контрола?

Отговори:

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>