Ich habe folgendes Layout:Bind MenuItems Befehl zum Benutzersteuerelemente Datacontext
public class ParentUserControl : UserControl{...}
<ParentNameSpace:ParentUserControl
...
DataContext={Binding MyViewModel ....}
>
<TreeView ...>
<HierarchicalDataTemplate
.... >
<StackPanel>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="item"
Command="{Binding DataContext.SomeCommandInMyViewModel,
RelativeSource={RelativeSource
AncestorType={x:Type ParentUserControl}}}"/>
</ContextMenu>
</StackPanel.ContextMenu>
<TextBlock Text="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView>
Im Versuch, aus dem Kontext eines TreeViewItem einen Befehl des Usercontrols Ansichtsmodell zu nennen ohne Erfolg. Es sagt mir, dass ParentUserControl in einem WPF-Projekt nicht unterstützt wird. Wenn ich AncestorType in UserControl ändere, wird der Befehl nicht aufgerufen. Gibt es etwas, das ich vermisse?
Meine Basisklasse ist abstrakt und leitet sich von einer anderen abstrakten Klasse mit einem Konstruktor einzigen Parameter, die Ursachen: Der Typ ‚ParentUserControl‘ kein Name-Attribut haben. Werttypen und -typen ohne Standardkonstruktor können als Elemente in einem ResourceDictionary verwendet werden. Ich möchte nicht die Basisklassen ändern, haben Sie eine andere Idee, um dies zu lösen: /? – Milleu
@Milleu Ich habe die Antwort aktualisiert. – Sam
super danke !, es funktioniert !! :) zu meinem Verständnis - ich könnte nicht die Vorfahren im ContextMenu verwenden, weil es in einem anderen visuellen Baum (anderer Prozess oder etwas?) - so muss ich den Tag (oder den Namen) definieren, um auf das ViewModel zuzugreifen. Ich habe ein paar HierarchicalDataTemplates kann ich das Tag einmal in Treeview definieren oder muss das Tag immer im Eigentümer-Element definiert werden (hatte keinen Erfolg, das Tag in Treeview zu verschieben und AncestorType in TreeView zu ändern) – Milleu