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" 然后您将必须在项目中添加对上述程序集的引用. 之后,所有的事情都与其他任何命令一样,就是说一个按钮或者一些东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |