WPF:绑定到ICommand的TreeViewItem

Ric*_*ard 9 c# wpf treeview command icommand

我正忙着在WPF中创建我的第一个MVVM应用程序.

基本上我遇到的问题是我有一个TreeView(System.Windows.Controls.TreeView),我放在我的WPF窗口,我已经决定将绑定到CommandViewModel项的ReadOnlyCollection,这些项包括一个DisplayString,Tag和RelayCommand.

现在在XAML中,我有了TreeView,并且已成功将我的ReadOnlyCollection绑定到此.我可以查看这个,在UI中看起来一切都很好.

现在的问题是,我需要的RelayCommand到树型视图的命令绑定,但是从我所看到的TreeViewItem没有命令.这是否迫使我在IsSelected属性中甚至在TreeView_SelectedItemChanged方法后面的代码中执行此操作,还是有办法在WPF中神奇地执行此操作?

这是我的代码:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Commands"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True">
    </TreeViewItem>
</TreeView.Items>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我很乐意去:

<TreeView BorderBrush="{x:Null}" 
      HorizontalAlignment="Stretch" 
      VerticalAlignment="Stretch">
<TreeView.Items>
    <TreeViewItem
        Header="New Trade"
        ItemsSource="{Binding Commands}"
        DisplayMemberPath="DisplayName"
        IsExpanded="True"
        Command="{Binding Path=Command}">
    </TreeViewItem>
</TreeView.Items>
Run Code Online (Sandbox Code Playgroud)

有人有一个解决方案,允许我使用我有的RelayCommand基础设施.

谢谢你们,非常感谢!

理查德

Sha*_*spe 25

我知道这是前一段时间的"回答",但由于答案并不理想,我想我会把我的两分钱.我使用一种方法,允许我不必诉诸任何"样式按钮技巧",甚至使用代码隐藏,而是保持我在MVVM中的所有分离.在TreeView中添加以下xaml:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectedItemChanged">
        <i:InvokeCommandAction Command="{Binding TreeviewSelectedItemChanged}" CommandParameter="{Binding ElementName=treeView, Path=SelectedItem}"/>
    </i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)

在你的xaml标题中添加:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Run Code Online (Sandbox Code Playgroud)

然后你必须在项目中添加对上面程序集的引用.

在那之后,一切行为都与任何其他命令在按钮或其他东西上的行为相同.