WPF TreeView 全选/反选/子级选中父级也选中
创始人
2024-12-29 07:06:28
0
// TreeView 全选/反选/子级选中父级也选中 

CSDN 下载链接

                                                                                          
 ///   /// 选中  ///   ///   ///   private void CkName_Checked(object sender, RoutedEventArgs e)  {      CheckBox ck = sender as CheckBox;      var list = viewModel.MenuList.ToList();       for (int i = 0; i < list.Count(); i++)      {          var item = list[i];          if (ck.Tag.ToString() == item.menu.HeaderCode)          {              item.IsSelect = true;              item.MenuChild = setBol(item.MenuChild, true, ck.Tag.ToString(), true);          }          else          {              item.MenuChild = setBol(item.MenuChild, true, ck.Tag.ToString());          }      }       gg(ck.Tag.ToString(), list);    }   ///   /// 修改是否选中  ///   ///   ///   ///   public List setBol(List list, bool bol, string str, bool dbol = false)  {      var d = list.ToList();      for (int i = 0; i < d.Count(); i++)      {          if (str == d[i].menu.HeaderCode || dbol)          {              d[i].IsSelect = bol;              if (d[i].MenuChild != null && d[i].MenuChild.Count > 0)              {                  d[i].MenuChild = setBol(d[i].MenuChild, bol, str, true);              }          }      }      return d;  }    ///   /// 不选中  ///   ///   ///   private void CkName_Unchecked(object sender, RoutedEventArgs e)  {       CheckBox ck = sender as CheckBox;      var list = viewModel.MenuList.ToList();       for (int i = 0; i < list.Count(); i++)      {          var item = list[i];          if (ck.Tag.ToString() == item.menu.HeaderCode)          {              item.IsSelect = false;              item.MenuChild = setBol(item.MenuChild, false, ck.Tag.ToString(), true);          }          else          {              item.MenuChild = setBol(item.MenuChild, false, ck.Tag.ToString());          }      }        gg(ck.Tag.ToString(),list);   }   ///   ///    ///   ///   ///    private void gg(string cc, List list)  {      List xin = new List();      var r = viewModel.bphList(list.ToList()).Select(x => new MenuParent(x.IsSelect, x.menu)).OrderByDescending(x => x.menu.Remark).ToList();      var one = r.FirstOrDefault(x=>x.menu.HeaderCode == cc);       if (string.IsNullOrEmpty(one.menu.HeaderParent))      {          viewModel.MenuList = new System.Collections.ObjectModel.ObservableCollection(viewModel.BuildTree(r.OrderBy(x => x.menu.Remark).ToList()));          return;      }       xin123 = new List();      gg2(one.menu.Header,r);       for (int i = 0; i < r.Count(); i++)      {          var d = r[i];          if (xin123.Any(x => x.menu.Header == d.menu.Header))          {              d.IsSelect = xin123.FirstOrDefault(x=>x.menu.Header==d.menu.Header).IsSelect;          }      }             viewModel.MenuList = new System.Collections.ObjectModel.ObservableCollection(viewModel.BuildTree(r.OrderBy(x=>x.menu.Remark).ToList()));  }    List xin123 = new List();  private void gg2(string cc, List list,string s="")  {      var r = list.ToList();      var one = r.FirstOrDefault(x => x.menu.Header == cc);      if(!string.IsNullOrEmpty(s) && one.menu.Header != s)      {          if (r.Any(x => x.menu.HeaderParent == one.menu.Header && x.IsSelect))          {              one.IsSelect = true;          }          else          {              one.IsSelect = false;          }            xin123.Add(one);          for (int i = 0; i < r.Count(); i++)          {              var d = r[i];              if (xin123.Any(x => x.menu.Header == d.menu.Header))              {                  d.IsSelect = xin123.FirstOrDefault(x => x.menu.Header == d.menu.Header).IsSelect;              }          }      }      if (!string.IsNullOrEmpty(one.menu.HeaderParent))      {          gg2(one.menu.HeaderParent,list, cc);      }   } 
public class t_menu {     ///      ///      ///      public t_menu()     {     }      private System.Int32 _id;     ///      ///      ///      public System.Int32 id { get { return this._id; } set { this._id = value; } }      private System.String _HeaderCode;     ///      ///      ///      public System.String HeaderCode { get { return this._HeaderCode; } set { this._HeaderCode = value; } }      private System.String _Header;     ///      ///      ///      public System.String Header { get { return this._Header; } set { this._Header = value; } }      private System.String _HeaderParent;     ///      ///      ///      public System.String HeaderParent { get { return this._HeaderParent; } set { this._HeaderParent = value; } }      private System.String _Remark;     ///      ///      ///      public System.String Remark { get { return this._Remark; } set { this._Remark = value; } }      private System.SByte? _ToRole;     ///      ///      ///      public System.SByte? ToRole { get { return this._ToRole; } set { this._ToRole = value; } }      private System.SByte? _status;     ///      ///      ///      public System.SByte? status { get { return this._status; } set { this._status = value; } } }     public class MenuParent     {          public t_menu menu { get; set; }          ///          /// 是否选中         ///          public bool IsSelect { get; set; }          ///          /// 子菜单列表         ///          public List MenuChild { get; set; }          public MenuParent(t_menu menu)         {             this.menu = menu;             this.IsSelect = false;             this.MenuChild = new List();         }         public MenuParent(bool IsSelect,t_menu menu)         {             this.menu = menu;             this.IsSelect = IsSelect;             this.MenuChild = new List();         }     } 
// viewModel // 初始化时  List menuParents = new List(); MenuList = new ObservableCollection(); MenuList = new ObservableCollection(BuildTree(menuParents));    private ObservableCollection _menuList = new ObservableCollection();  ///   /// 菜单列表  ///   public ObservableCollection MenuList  {      get      {          return _menuList;      }      set      {          _menuList = value;          OnPropertyChanged(() => MenuList);      }  }  ///   /// 转为tree结构  ///   ///   ///   public List BuildTree(List menuItems)  {      // 创建一个字典来存储所有菜单项,以便快速查找        var menuDict = new Dictionary();       // 遍历菜单项,将它们添加到字典中        foreach (var item in menuItems)      {          menuDict[item.menu.Header] = item;      }       // 创建一个列表来存储根菜单项(HeaderParent 为空或未设置的)        var rootMenuItems = new List();       // 再次遍历菜单项,构建树形结构        foreach (var item in menuItems)      {          // 检查当前项是否有 HeaderParent            if (string.IsNullOrEmpty(item.menu.HeaderParent) || !menuDict.ContainsKey(item.menu.HeaderParent))          {              // 如果没有 HeaderParent 或找不到父节点,则它是根节点                rootMenuItems.Add(item);          }          else          {              // 找到父节点,并将当前项添加到其父节点的 Children 列表中                MenuParent parent = menuDict[item.menu.HeaderParent];               parent.MenuChild.Add(item);          }      }       // 返回根菜单项列表        return rootMenuItems;  }   ///   /// 获取list  ///   ///   public List bphList(List menuParents)  {      List menuParents1 = new List();       if(menuParents != null && menuParents.Count>0)      {          foreach (var item in menuParents)          {              var temp = item;              if(temp != null && temp.MenuChild!=null && temp.MenuChild.Count>0)              {                  var d = bphList(temp.MenuChild);                  menuParents1.AddRange(d);              }               menuParents1.Add(item);           }      }       return menuParents1;  } 

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...