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 № 1Moż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>