/ / Pozwól użytkownikowi definiować elementy menu kontekstowego - wpf

Pozwól użytkownikowi definiować elementy menu kontekstowego - wpf

Próbuję zezwolić użytkownikom tej klasy na definiowanie elementów kontekstowych menu, ponieważ w różnych przypadkach użycia będziemy musieli ujawnić różne elementy menu kontekstowego.

Źródło XAML

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

Jak chciałbym go użyć:

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

Co muszę dodać do modelu sterowania lub widoku, aby odsłonić elementy menu kontekstowego, aby można je było zdefiniować w miejscu, w którym używam formantu?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz mieć powiązanie elementu ItemsSource ContextMenu z właściwością kolekcji w swoim ViewModelu.

Zakładając, że wszystkie twoje modele ViewModels odziedziczą po pewnym interfejsie (twoim własnym), mogą zaimplementować moduł pobierający do tej kolekcji i jeśli mają elementy lub nie (w celu wyłączenia ContextMenu).

Na cokolwiek innego będziesz musiał być bardziej szczegółowy.


0 dla odpowiedzi nr 2

Oczywiście opracowałem poprawkę około 5 minut po opublikowaniu tego.

Dodano do mojego kodu kontrolnego.

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

I użył tego do odniesienia do kontroli.

<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>