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)
然后你必须在项目中添加对上面程序集的引用.
在那之后,一切行为都与任何其他命令在按钮或其他东西上的行为相同.
| 归档时间: |
|
| 查看次数: |
14062 次 |
| 最近记录: |