2017-05-01 2 views
0

Ich versuche, Benutzern dieser Klasse zu erlauben, die Menükontextelemente zu definieren, da in verschiedenen Anwendungsfällen verschiedene Kontextmenüelemente verfügbar gemacht werden müssen.Erlaube dem Benutzer, Kontextmenüs zu definieren

Quelle XAML

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

Wie ich mag es benutzen:

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

Was ich an die Steuerung oder Ansicht Modell hinzufügen tun müssen, um die Kontextmenüelemente zu, so können sie definiert sein, wo ich das Steuerelement verwende?

Antwort

0

Natürlich habe ich etwa 5 Minuten nach der Veröffentlichung eine Lösung ausgearbeitet.

Hinzugefügt zu meinem Kontrollcode.

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

Und dies verwendet, um das Steuerelement zu verweisen.

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

Sie könnten die ItemsSource des ContextMenus an eine Auflistungseigenschaft in Ihrem ViewModel gebunden haben.

Angenommen, alle Ihre ViewModels erben von einer bestimmten Schnittstelle (Ihre eigenen), könnten sie einen Getter zu dieser Sammlung implementieren und wenn die Elemente haben oder nicht (zum Deaktivieren des ContextMenu).

Für alles andere müssen Sie genauer sein.

Verwandte Themen