У меня есть следующий макет:Bind MenuItems Команда UserControls 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 пытается вызвать команду UserControls ViewModel внутри контекста TreeViewItem без успеха. Это говорит мне, что ParentUserControl не поддерживается в проекте wpf. Если я изменю AncestorType на UserControl, команда не будет вызвана. Что-то я пропустил?
Мой базовый класс является абстрактным и является производным от другого абстрактного класса с одним конструктором параметров, который вызывает: Тип «ParentUserControl» не может иметь атрибут Name. Типы и типы значений без конструктора по умолчанию могут использоваться как элементы в ResourceDictionary. Я не хочу менять базовые классы, есть ли у вас другая идея, чтобы решить эту проблему: /? – Milleu
@Milleu Я обновил ответ. – Sam
Огромное спасибо !, он работает !! :) для моего понимания - я не мог использовать Ancestor внутри ContextMenu, потому что он в другом визуальном дереве (другой процесс или что-то?) - поэтому мне нужно определить тег (или имя) для доступа к ViewModel. У меня есть еще пара HierachicalDataTemplates, я могу определить тег один раз в Treeview или всегда нужно определить тег в элементе owner? (Не успел переместить Tag в Treeview и изменить AncestorType на TreeView) – Milleu