WPF-Kontext-Menü, deren Elemente definiert sind als die Daten Vorlagen
Habe ich eine Liste Ansicht zeigt eine Auflistung von Elementen, jedes Element hat als die Ihr zugrunde liegenden Daten, die ein view-model (MVVM).
Was ich gerne tun würde, ist die Anzeige verschiedener Menüpunkte im Kontext-Menü, wenn der Benutzer klickt auf eine dieser Liste Elemente anzeigen. Die Menüpunkte angezeigt werden, ist abhängig von der Art des ausgewählten Elements (d.h. die Art der zugrunde liegenden view-Modell).
Ich würde erwarten, dass die unten zu arbeiten, aber es funktioniert nicht (keine Objekte im Kontext-Menü angezeigt).
<ListView.ContextMenu>
<ContextMenu DataContext="{Binding Path=PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
<ContextMenu.Resources>
<DataTemplate DataType="{x:Type ViewModels:ViewModel1}">
<MenuItem Header="DoStuffForVM1" Command="{Binding DoStuffForVM1Command}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:ViewModel2}">
<MenuItem Header="DoStuffForVM2" Command="{Binding DoStuffForVM2Command}"/>
</DataTemplate>
</ContextMenu.Resources>
<ContentPresenter ContentSource="{Binding}" />
</ContextMenu>
</ListView.ContextMenu>
Irgendwelche Ideen?
Dank.
- Auch noch erwähnenswert ist, ich bekomme keine Datenbindung Fehler.
InformationsquelleAutor RobJohnson | 2012-06-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
diese funktioniert bei mir:
Ist, weil Sie das Kontextmenu der Listenansicht, so DataContext ist der äußere Rahmen der ListView, anstatt das ViewModel eines einzelnen Listenelements.
Müssen Sie das Kontextmenü der einzelnen Elemente statt. Zum Beispiel, verwenden Sie einen Stil:
Jedoch die oben genannten berücksichtigen nicht die verschiedenen Arten von Menü.
Wenn Sie zum definieren von Vorlagen für Ihre listview-für jeden Typ, der einfachste Weg wäre zu definieren, die
ContextMenu
explizit in jedemDataTemplate
.Wenn nicht, werden Sie es zu tun haben mit Triggern in dem Stil. Sie haben wahrscheinlich schreiben Sie ein Programm, auslösen zu können, die auf den Objekt-Typ.
ContextMenus
sind in einer anderen VisualTree, als Sie den rest an Ihre Anwendung, so dass dieMenuItem
RelativeSource binding funktioniert nicht.