我正忙于在 WPF 中创建我的第一个 MVVM 应用程序。
基本上我遇到的问题是我有一个 TreeView (System.Windows.Controls.TreeView),我已将其放置在 WPF 窗口上,我决定将绑定到 CommandViewModel 项目的 ReadOnlyCollection,并且这些项目包含DisplayString、Tag 和 RelayCommand。
现在,在 XAML 中,我有了 TreeView,并且已成功将 ReadOnlyCollection 绑定到此。我可以查看此内容,并且用户界面中的一切看起来都很好。
现在的问题是我需要将 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 基础设施吗?
谢谢各位,非常感谢!
Richard
我知道这个问题不久前就得到了“回答”,但由于答案并不理想,我想我应该投入两分钱。我使用的方法使我不必诉诸任何“样式按钮欺骗”,甚至不必使用代码隐藏,而是将所有分离保留在 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"
然后您必须在项目中添加对上述程序集的引用。
之后,一切的行为都与任何其他命令上的按钮或其他东西相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)