微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – WPF:TreeViewItem绑定到ICommand

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

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

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

现在的问题是,我需要将RelayCommand绑定到TreeViewItem的命令,但是从我可以看到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>

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

<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>

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

谢谢你们,非常感谢!

理查德

解决方法

我知道这是一段时间以来的“回答”,但由于答案不理想,我想我会把我的两美分.我使用一种方法,允许我不必诉诸任何“风格的按钮欺骗”,甚至使用代码隐藏,而是保持我在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>

在你的xaml标题添加

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

然后您将必须在项目中添加对上述程序集的引用.

之后,所有的事情都与其他任何命令一样,就是说一个按钮或者一些东西.

原文地址:https://www.jb51.cc/csharp/93299.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐