Команда контекстного меню Treeview не запускается - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть древовидная структура, привязанная к коллекции Observable некоторого типа свойства.Существует HierarchicalDataTemplate, который показывает данные в виде дерева.Теперь мне нужно показать определенное контекстное меню для каждого элемента HierarchicalDataTemplate.

Я использую следующий XAML для отображения контекстного меню:

<HierarchicalDataTemplate ItemsSource="{Binding Collections}">
            <TextBlock Text="{Binding Path=Name}">
            <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Create" Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.AddCommand}" CommandParameter="{Binding}"/>
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
        </HierarchicalDataTemplate>

Здесь AddCommand написан в модели представления, которая являетсяпривязан к этому под контролем .. Я могу видеть контекстное меню, но событие не срабатывает при нажатии на элемент меню.

Пожалуйста, помогите ..

1 Ответ

1 голос
/ 27 февраля 2012

Ваша привязка команды не будет работать, потому что ContextMenu не находится в том же логическом дереве, что и ваш UserControl, поэтому он не найдет предка UserControl. Однако ваше ContextMenu должно автоматически наследовать текстовый код своего контейнера. Так что это должно работать -

<ContextMenu>
      <MenuItem Header="Create" Command="{Binding AddCommand}" CommandParameter="{Binding}"/>
</ContextMenu>

Однако свойство AddCommand должно существовать в связанном элементе HierarchicalDataTemplate.

EDIT:

Если ваша Команда не определена в связанном элементе вашего HierarchicalDataTemplate и вместо этого в вашем UserControl. Тогда еще одна мысль, которую вы можете попробовать, это дать вашему UserControl имя, а затем привязать команду к нему с помощью ElementName. Как это

Обновлено снова:

<ContextMenu>
      <MenuItem Header="Create" Command="{Binding ElementName="MyUserControl" Path="DataContext.AddCommand"}" CommandParameter="{Binding}"/>
</ContextMenu>
...