问题描述:左侧treeview控件中点击不同类别的节点时,右侧的页面会显示不同的权限。比如对于My Publications,拥有Modify和Delete两种权限,对于My Subscriptions,只拥有Unsubscribe的权限。

我想到的办法是将权限绑定到TreeView控件的SelectedItemChanged方法,也就是说点击My Publications下面的子节点时,Modify和Delete两个Button控件是可见的,点击My Subscriptions下面的子节点时,Unsubscribe这个Button控件是可见的。

对于SelectedItemChanged使用MVVM绑定,使用到了System.Windows.Interactivity程序集。

<TreeView Name="treeview" Grid.Column="0" ItemsSource="{Binding Path=Resources}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectedItemChanged">
<i:InvokeCommandAction Command="{Binding Path=SelectedItemChangedCommand}"
CommandParameter="{Binding ElementName=treeview, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:TreeNode}" ItemsSource="{Binding Path=ChildNodes}">
<Label Content="{Binding Path=NodeName}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>

XAML代码

注:需要引用System.Windows.Interactivity程序集

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

将SelectedItemChanged绑定到了SelectedItemChangedCommand方法,且传递的方法参数是treeview的SelectedItem。

注:为了让界面看起来更漂亮,我使用了MahApps.Metro,不知道为什么,在引用System.Windows.Interactivity程序集时,先引用的4.0版本,但是没有办法加载进来。后来改成了3.5版本,可以成功加载,但是其中没有Command属性,后又改成4.0版本,竟然可以成功加载了。

如果有更好的实现方法,请一定告诉我,谢谢~

2021.8.26补充,最近在做一个.net core wpf项目,用不了System.Windows.Interactivity程序集,需要安装Microsoft.Xaml.Behaviors.Wpf包,然后引用xmlns:i="http://schemas.microsoft.com/xaml/behaviors",其他都不变。

2021.12.14补充,关于TreeView控件的demo:

WPF中常用控件(TreeView, ComboBox, DataGrid, ListView)使用MVVM模式绑定的demo - 南风小斯 - 博客园 (cnblogs.com)

最新文章

  1. 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控
  2. EF架构~通过EF6的DbCommand拦截器来实现数据库读写分离
  3. VMware12中CentOS7网络设置
  4. C#多线程 线程池
  5. 【软件使用】用IntelliJ IDEA开发Android程序图解
  6. mvc+ef中比较数据
  7. Guidelines for clock
  8. jQuery(一)delegate() 方法
  9. 8个超炫酷仿HTML5动画源码
  10. sublime常用插件及配置,自留自用
  11. 谷歌 google
  12. python进阶3--文件系统
  13. NHibernate联合主键详细示例
  14. strcpy和memcpy
  15. emwin之在中断服务程序中创建窗口的结果
  16. Android进阶:七、Retrofit2.0原理解析之最简流程【上】
  17. Linux编程基础——GDB(设置断点)
  18. CODEVS.5037.线段树练习4加强版(分块 区间k的倍数)
  19. Python之socket_tcp
  20. 程序员眼中的Redis

热门文章

  1. rpc基础讲解
  2. jdk11+安装(win)
  3. 为什么 Redis 的查询很快, Redis 如何保证查询的高效
  4. LNMP架构搭建
  5. Linux空洞权限有问题处理
  6. 执行df hang住
  7. java 中的多线程简单介绍
  8. c++17 新特性
  9. Python PyQt5 | Hi音乐 v3.0.0 正式版发布
  10. Java8特性大全(最新版)