首页 > 其他分享 >WPF 构建属性结构

WPF 构建属性结构

时间:2024-12-25 09:44:48浏览次数:8  
标签:set get List private public 构建 WPF nodes 属性

在WPF中构建树形结构

  • 首先构建一个属性结构的类,在这个类中,其中NodeId、NodeName、ParentId 是最重要的3个属性,是构建树形结构的关键.另外一个比较重要的属性就是ChildNodes,它是一个树形集合类对象,该属性存储子树,是构建树形结构的必要条件。其他都是附加属性,如Icon 用于存储图标,Tag用于扩展预留。
 public class TTreeNode
   {
       public int NodeId { get; set; }
       public int ParentId { get; set; }
       public string NodeName { get; set; }
       public string Icon { get; set; }
       public string Tag { get; set; }
       public List<TTreeNode> ChildNodes { get; set; }
       public TTreeNode() {
           ChildNodes = new List<TTreeNode>();
       }
   }
  • 构建数据模型-视图模型
    在数据模型类中定义了TreeNodes 属性,该属性用于存储树形结构节点数据。一个方法,通过递归方式遍历树形节点。
public class TreeViewModel:BasePropertyChanged
    {
        private List<TTreeNode> treenodes;
        public List<TTreeNode> TreeNodes { get { return treenodes; }set { treenodes = value;RaiseProperty("TreeNodes"); } }
        private List<TTreeNode> getChildNodes(int parentId, List<TTreeNode> nodes) {
            List<TTreeNode> mainNodes = nodes.Where(x => x.ParentId == parentId).ToList();
            List<TTreeNode> otherNodes = nodes.Where(x => x.ParentId != parentId).ToList();
            foreach (TTreeNode node in mainNodes) {
                node.ChildNodes = getChildNodes(node.NodeId, otherNodes);
            }
            return mainNodes;

        }
        public TreeViewModel(List<TTreeNode> nodes) {
            TreeNodes = getChildNodes(0, nodes);
        }
    }
  • 调用方法
        private ObservableCollection<TreeViewItemModel> deptItems { get; } = new ObservableCollection<TreeViewItemModel>(); 
        private List<Permission> permissions;
        private TreeViewModel tm;
        private int pid;
    

        private void DoSearch(int pId=1)
        {
            permissions = DbHelper.dbContext.permissions.ToList(); //获取数据
            List<TTreeNode> nodes = new List<TTreeNode>(); //建立数据节点
            foreach (var p in permissions)   //填充数据
            {
                nodes.Add(new TTreeNode { NodeId = p.Id, ParentId = p.ParentId, NodeName = p.PerName, Icon = "\xe6d6", Tag = p.Id.ToString() });
            }
            TreeViewModel tv = new TreeViewModel(nodes);  //构建树形结构数据模型对象
            tvPermission.DataContext = tv;
        }
  • 属性结构 View
   <TreeView  x:Name="tvPermission" Grid.Column="0" Grid.Row="1" ItemsSource="{Binding TreeNodes}"
                                Margin="5,0,0,0"
                                Background="AliceBlue"
                                 >
                        <TreeView.ItemContainerStyle>
                            <Style TargetType="{x:Type TreeViewItem}"
                                    BasedOn="{StaticResource {x:Type TreeViewItem}}">
                                <Setter Property="Visibility" Value="{Binding Visibility}" />
                                <Setter Property="IsExpanded" Value="true" />
                            </Style>
                        </TreeView.ItemContainerStyle>
                        <TreeView.ItemTemplate>
                            <HierarchicalDataTemplate DataType="{x:Type m:TTreeNode}" ItemsSource="{Binding Path=ChildNodes}" >
                                <TextBlock>
                                    <Run Text="{Binding Icon}" FontSize="17" FontFamily="{StaticResource iconfonts}"/> <Run Text="{Binding Path=NodeName}" />
                                </TextBlock>
                            </HierarchicalDataTemplate>
                        </TreeView.ItemTemplate>
                    </TreeView>
  • 效果
    image

标签:set,get,List,private,public,构建,WPF,nodes,属性
From: https://www.cnblogs.com/sundh1981/p/18629405

相关文章

  • 写一个方法去除对象中值为空('',' ',null,undefined)的属性
    在前端开发中,你可以使用JavaScript来编写一个方法,该方法会遍历对象的属性并删除值为空(''、''、null、undefined)的属性。以下是一个示例实现:functionremoveEmptyProperties(obj){//创建一个新的对象,以避免直接修改原始对象constcleanedObj={...obj};//遍历对......
  • 你有使用过resize属性吗?它有什么用途?
    是的,我使用过resize属性。在前端开发中,resize属性是一个有用的CSS属性,它主要用于指定一个元素是否可以被用户调整大小,即改变元素的宽度或高度。以下是关于resize属性的详细用途和特点:用户调整元素大小:通过resize属性,用户可以自由地通过拖动的方式来调整指定元素的大小,这增强了......
  • C++23新特性解析:[[assume]]属性
    1.引言在C++的发展历程中,性能优化一直是一个核心主题。C++23引入的[[assume]]属性为开发者提供了一个强大的工具,允许我们直接向编译器传达程序的不变量(invariant),从而实现更好的代码优化。1.1为什么需要assume?在C++23之前,主要编译器都提供了自己的内置假设机制:MSVC和IC......
  • docker 构建最小镜像 - 2MB 不到
    @目录1.编译code2.编写Dockerfile3.构建镜像4.运行起来5.总结1.编译coderoot@jn:/home/jn/Desktop/Docker#cathello.gopackagemainimport("fmt""time")funcmain(){for{fmt.Println("hello~")......
  • WPF TileMode ViewPort ImageBrush VisualBrush
    <Windowx:Class="WpfApp98.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
    文章目录前言......
  • vite 使用rollup和esbuild 分别来构建生产环境代码、开发环境代码
    rollup和esbuild在Vite中,开发环境和生产环境使用了不同的构建工具:开发环境:Vite使用esbuild进行快速的热重载和模块编译。esbuild以其极高的速度著称,可以显著提高开发体验。生产环境:Vite使用Rollup进行最终的打包和优化。Rollup是一个功能强大的模块打包器,擅长于......
  • 低空经济的地理信息支撑:构建安全、高效的飞行管理体系
    随着无人机等低空飞行器的广泛应用,低空空域管理的重要性日益凸显。地理信息技术作为低空空域管理的重要支撑,对于保障低空经济的健康发展具有不可替代的作用。 地理信息技术在低空空域管理中的作用地理信息技术在低空空域管理中扮演着关键角色,主要体现......
  • Hibernate6.6 集成构建工具——Bytecode Enhancement
    字节码增强工具Hibernateperformsbytecodeenhancementthroughitsorg.hibernate.bytecode.enhance.spi.Enhancercontract.Thesebuildtimetoolsprovideawaytoincorporateconfigurationandexecutionoftheenhancerintoabuild.当前版本只对增加了注解的类进......
  • WPF应用启动时,检测触摸失效的几种方式
    在开发OPS项目,发现插拔式的OPS在切换系统、开关机、重启,会时不时出现部分WPF开机自启的应用触摸失效的问题。而且出现问题的应用都是全屏窗口应用。用snoop附加上去,没有Touch和Styulus的的相关事件,但是鼠标事件是能触发的,而且系统的其他的应用软件都可以触摸。这就是我们常见......