gpt4 book ai didi

c# - WPF:绑定(bind)到 ICommand 的 TreeViewItem

转载 作者:太空狗 更新时间:2023-10-29 17:30:47 24 4
gpt4 key购买 nike

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

基本上我遇到的问题是我有一个 TreeView (System.Windows.Controls.TreeView),我已经把它放在我的 WPF 窗口上,我决定我将绑定(bind)到一个 ReadOnlyCollection 的 CommandViewModel 项目,这些项目由 DisplayString、Tag 和 RelayCommand 组成。

现在在 XAML 中,我有我的 TreeView 并且我已经成功地将我的 ReadOnlyCollection 绑定(bind)到它。我可以查看它,并且 UI 中的一切看起来都很好。

现在的问题是我需要将 RelayCommand 绑定(bind)到 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 header 中添加:

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

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

在那之后,一切都与任何其他命令一样,只需说一个按钮或其他东西。

关于c# - WPF:绑定(bind)到 ICommand 的 TreeViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266890/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com