Привязка команд контекстного меню к ViewModel, который не находится в контекстном дереве визуалов

У меня есть TreeView, чьи элементы являются коллекцией моего класса Model. Я добавил контекстное меню в TreeView. Поскольку команды contextMenu должны быть в визуальном дереве, я должен был поместить их в свой класс Model. Что не так (привязка каталога к модели).

Как я могу привязать команду моего контекстного меню к моей модели представления, а не к модели?

Спасибо

1 ответ

Решение

Вам не нужно размещать команды в модели. Здесь вы можете получить доступ к своим командам во ViewModel, как показано ниже: Здесь Tag будет содержать Binding to ViewModel и может использоваться для доступа к команде.

    <TreeView Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"
      <TreeView.ContextMenu>
        <ContextMenu>
            <MenuItem Header="MyCommand" 
                     CommandParameter="{Binding }"
                     Command="{Binding Path=PlacementTarget.Tag.DataContext.MyCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}"/>
        </ContextMenu>
      </TreeView.ContextMenu>
    </TreeView>
Другие вопросы по тегам