Использование команд в WPF TreeView с HierarchicalDataTemplate

Есть ли способ использовать команды в древовидной структуре с HierarchicalDataTemplate, чтобы я мог реагировать на щелчок по элементу в древовидном представлении? Я бы предпочел решение без кода, если оно есть.

Вот мой TreeView:

<TreeView ItemsSource="{Binding Main.TreeItems}">
    <TreeView.ItemTemplate>                     
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
            <TextBlock Text="{Binding Path=Header}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>                
</TreeView>

1 ответ

Предоставить свойство типа ICommand для вашего элемента (ViewModel) и привязать к нему. Таким образом, ваш класс предметов будет выглядеть примерно так:

class MyTreeItem
{
   public MyTreeItem()
   {
      this.SomeCommand = /* create command here */ null;
      this.Children = new ObservableCollection<MyTreeItem>();
   }

   public ICommand SomeCommand { get; private set; }

   public ObservableCollection<MyTreeItem> Children { get; private set; }
}

В xaml вы можете написать:

<TreeView ItemsSource="{Binding Main.TreeItems}">
    <TreeView.ItemTemplate>                     
       <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
            <TextBlock Text="{TemplateBinding Header}" />
            <Button Text="My Command" Command="{TemplateBinding SomeCommand}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>                
</TreeView>

Я думаю, что это должно сработать, по крайней мере, так было и в прошлый раз, когда я использовал это:)

Другие вопросы по тегам