c# WPF中的TreeView使用详解
GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!
【 如果你想靠AI翻身,你先需要一个靠谱的工具! 】
在wpf中实现treeview的功能,可能看到很多分享的都是简单的绑定,仅此记录自己完成的功能。
前台
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < TreeView x:Name = "chapterTree" Grid.Column = "0" SelectedItemChanged = "chapterTree_SelectedItemChanged" PreviewMouseRightButtonDown = "chapterTree_PreviewMouseRightButtonDown" FontSize = "14" ItemsSource = "{Binding Path=Nodes}" > < TreeView.ContextMenu > < ContextMenu > < MenuItem Header = "保存" Name = "btnAlterData" Click = "btnAlterData_Click" /> < MenuItem Header = "新增兄弟节点" Name = "btnSaveData" Click = "btnSaveData_Click" /> < MenuItem Header = "新增子节点" Name = "btnSaveSonData" Click = "btnSaveSonData_Click" /> < MenuItem Header = "删除" Name = "btnDdeleteData" Click = "btnDdeleteData_Click" /> < MenuItem Header = "上移一位" Name = "btnUp" Click = "btnUp_Click" /> < MenuItem Header = "下移一位" Name = "btnDown" Click = "btnDown_Click" /> </ ContextMenu > </ TreeView.ContextMenu > < TreeView.ItemTemplate > < HierarchicalDataTemplate DataType = "{x:Type c:OrderModel}" ItemsSource = "{Binding Path=ChildNodes}" > < Label Content = "{Binding Path=OrderName}" /> </ HierarchicalDataTemplate > </ TreeView.ItemTemplate > </ TreeView > |
后台
1 2 3 4 5 6 7 8 9 | CommandModel cm; public Command() { InitializeComponent(); cm = new CommandModel(); chapterTree.ItemsSource = cm.Nodes; } |
新建了CommandModel页面用来绑定数据(从数据库提取的数据,转换成了list)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | public event PropertyChangedEventHandler PropertyChanged; private ObservableCollection<OrderModel> nodes = new ObservableCollection<OrderModel>(); public ObservableCollection<OrderModel> Nodes { get { return nodes; } set { nodes = value; if (PropertyChanged != null ) PropertyChanged( this , new PropertyChangedEventArgs( "Nodes" )); } } public CommandModel() { Initiate(); } private void Initiate() { using (SQLiteConnection con = new SQLiteConnection(MainWindow.sb.ToString())) { DataTable table = new DataTable( "MyTable" ); var reader = con.ExecuteReader( "SELECT * FROM OrderData Order by OrderID" ); table.Load(reader); ObservableCollection<OrderModel> _nodes = new ObservableCollection<OrderModel>(); _nodes = ConvertToList(table); //ShowTreeView(); Nodes = getChildNodes(0, _nodes); } } private ObservableCollection<OrderModel> getChildNodes( long parentID, ObservableCollection<OrderModel> nodes) { List<OrderModel> a = new List<OrderModel>(nodes.Where(x => x.ParentID == parentID).ToList()); ObservableCollection<OrderModel> mainNodes = new ObservableCollection<OrderModel>(a); List<OrderModel> b = new List<OrderModel>(nodes.Where(x => x.ParentID != parentID).ToList()); ObservableCollection<OrderModel> otherNodes = new ObservableCollection<OrderModel>(b); foreach (OrderModel node in mainNodes) node.ChildNodes = getChildNodes(node.ID, otherNodes); return mainNodes; } #region datatable转list /// <summary> /// datatable转list /// </summary> /// <param name="dt"></param> /// <returns></returns> public static ObservableCollection<OrderModel> ConvertToList(DataTable dt) { // 定义集合 ObservableCollection<OrderModel> ts = new ObservableCollection<OrderModel>(); // 获得此模型的类型 Type type = typeof (OrderModel); //定义一个临时变量 string tempName = string .Empty; //遍历DataTable中所有的数据行 foreach (DataRow dr in dt.Rows) { OrderModel t = new OrderModel(); // 获得此模型的公共属性 PropertyInfo[] propertys = t.GetType().GetProperties(); //遍历该对象的所有属性 foreach (PropertyInfo pi in propertys) { tempName = pi.Name; //将属性名称赋值给临时变量 //检查DataTable是否包含此列(列名==对象的属性名) if (dt.Columns.Contains(tempName)) { // 判断此属性是否有Setter if (!pi.CanWrite) continue ; //该属性不可写,直接跳出 //取值 object value = dr[tempName]; //如果非空,则赋给对象的属性 if (value != DBNull.Value) pi.SetValue(t, value, null ); } } //对象添加到泛型集合中 ts.Add(t); } return ts; } #endregion |
model页面的列中需要添加
1 2 3 4 5 | public ObservableCollection<OrderModel> ChildNodes { get ; set ; } public OrderModel() { ChildNodes = new ObservableCollection<OrderModel>(); } |
以上就是c# WPF中的TreeView使用详解的详细内容,更多关于c# WPF中的TreeView的资料请关注脚本之家其它相关文章!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
Unity UGUI的CanvasScaler画布缩放器组件介绍使用
这篇文章主要为大家介绍了Unity UGUI的CanvasScaler画布缩放器组件介绍使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07详解WPF如何使用WriteableBitmap提升Image性能
这篇文章主要为大家详细介绍了WPF如何使用WriteableBitmap提升Image性能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下2024-01-01
最新评论