码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件


    WPF 中提供 MVVM 模式。MVVM 模式是实现带有 UI 的应用程序时的一种设计模式。MVVM 模式是 Model-View-ViewModel 模式的缩写。
    分三部分实现:模型、视图和视图模型。模型是实现验证数据不一致和与数据库交换数据的过程的部分。视图是实现外观设计的部分。视图模型是保存数据以绘制视图并将输入从视图传递到模型的部分。
    在WPF的情况下,XAML文件对应视图,描述绑定路径规范目的地的cs类文件对应视图模型。

    1 Binding 绑定

    WPF 有一项称为数据绑定的功能。通过Binding属性将cs脚本中的数据与外观设计xaml中的UI组件进行数据关联。
    在窗体或者面板类中使用了 DataContext将数据模型与页面组件进行数据动态绑定,与WEB开发的前后端分离的MVVM模式相同。

    • Path= 属性获得绑定数据
    • DataContext:页面组件绑定数据源

    xaml

    <TextBox Text=”{Binding Path=name}”  x:Name="zhtbs">  
    
    • 1

    mvvm绑定模式

    -------------------------xaml代码-----------------------
      
    
    public partial class zht : Window{
        public zht(){
                InitializeComponent();
            	//绑定zhtbs组件与数据模型zhtpojo建立关系
                this.zhtbs.DataContext = new zhtpojo();
        }
        public class zhtpojo {
            public string name { get; set; } = "韬哥的代码世界";//绑定TextBox数据
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    绑定父亲容器,子容器使用

      <Grid x:Name="zhtbs">
          <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="200">ColumnDefinition>
          Grid.ColumnDefinitions>
          <Grid.RowDefinitions>
                    <RowDefinition Height="40">RowDefinition>
          Grid.RowDefinitions>
    <Button Grid.Row="2"  Grid.Column="0" Width="100" Height="97" Click="btnThd_Click" >dddddButton>
    <TextBox Text="{Binding Path=name}" Grid.Row="1" Grid.Column="1" />
    <TextBox Text="{Binding Path=name}" />
    Grid>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2 TreeView树组件

    TreeView 是树形控件是WPF中重要的控件。TreeView组件创建方法有两种,第一种页面直接生成的“静态”方法和第二种数据绑定的“动态”方法。

    2.1 TreeView静态生成

    使用 Xaml 在 TreeView 中创建 TreeViewItem 来创建一个树形结构,TreeViewItem属性来构架属性结构内容。

    • Header属性来定义树节点内容
    <TreeView FontSize="20">
        <TreeViewItem Header="系统管理">
         <TreeViewItem Header="部门管理">
               <TreeViewItem Header="部门信息"/>
               <TreeViewItem Header="部门机构"/>
               <TreeViewItem Header="部门权限"/>
           TreeViewItem>
       TreeViewItem>
    TreeView>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    效果图
    在这里插入图片描述

    2.2 TreeView动态生成

     public partial class Frame1 : Window{
        public Frame1(){
                InitializeComponent();
                List list=new List();//设置树容器
                var dto1 = new TreeDot("人员管理");//定义树的数据结构
                dto1.Dos.Add(new TreeDot("人员设置"));
                dto1.Dos.Add(new TreeDot("人员部门"));
                dto1.Dos.Add(new TreeDot("人员权限"));
                list.Add(dto1);
                CTreeView.ItemsSource = list;//TreeView组件名称全局唯一引用
            }
         public sealed class TreeDot{//定义树节点的Pojo数据模型
             public TreeDot(string name) {
                    Name = name;
             }
             public string Name { get; set; }
             //定义树子节点名称
             public List Dos { get; set; } = new List();
         }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 创建一个数据模型来装入树形数据。数据模型名称TreeDot。
    • TreeDot数据模型中定义节点名称属性Name。
    • TreeDot数据模型定义树子节点List Dos。
    • 定义树的数据结构。var dto1
    • 将树的数据结构与TreeView的ItemsSource树组件进行绑定。

    xaml代发

    <TreeView x:Name="CTreeView" FontSize="20">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="local:TreeDot"---------绑定树数据结构Pojo数据模型名称
                                      ItemsSource="{Binding Dos}">-----绑定子节点名称
                <TextBlock Text="{Binding Name}"/>------------绑定节点名称
            HierarchicalDataTemplate>
        TreeView.ItemTemplate>
    TreeView>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • TreeView 组件名称是CTreeView。
    • 创建组件绑定数据 ItemTemplate 和 HierarchicalDataTemplate 模板。
    • 在 HierarchicalDataTemplate 中 DataType 属性中指定作为树形的数据结构的类名称 “TreeDot” 自己定义。
    • 在ItemsSource属性中定义TreeDot类中的子节点集合名称 “Dos”。
    • TextBlock属性中定义树形数据机构TreeDot中节点的名称 Name属性。
      在这里插入图片描述

    2.3 TreeView事件绑定

    TreeView组件事件需要在TreeView属性中定义 SelectedItemChanged事件。

     <TreeView x:Name="CTreeView" FontSize="20" 
               SelectedItemChanged="OnTreeViewChanged">---------定义点击事件内容
         <TreeView.ItemTemplate>
             <HierarchicalDataTemplate DataType="local:TreeDot"
                                      ItemsSource="{Binding Dos}">
                 <TextBlock Text="{Binding Name}"/>
             HierarchicalDataTemplate>
         TreeView.ItemTemplate>
    TreeView>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    事件代码

    private void OnTreeViewChanged(object sender, RoutedPropertyChangedEventArgs e){
                TreeView t=(TreeView)sender;//获得点击事件树组件
                TreeDot tv =(TreeDot)t.SelectedItem;//获得选中的树的数据结构类型
               // TreeViewItem t=(TreeViewItem)((TreeView)sender).SelectedItem;
                MessageBox.Show(tv.Path);//获得数据结构属性内容
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    重新定义树形数据结构,增加一个Path属性内容。

     public partial class Frame1 : Window{
        public Frame1(){
                InitializeComponent();
                List list=new List();//设置树容器
                 var dto1 = new TreeDot("人员管理", "url");
                dto1.Dos.Add(new TreeDot("人员设置","page1"));
                dto1.Dos.Add(new TreeDot("人员部门", "page2"));
                dto1.Dos.Add(new TreeDot("人员权限", "page3"));
                list.Add(dto1);
                CTreeView.ItemsSource = list;
            }
         public sealed class TreeDot{//定义树节点的Pojo数据模型
             public TreeDot(string name) {
                    Name = name;
             }
             public string Name { get; set; }
             public string Path { get; set; }
             //定义树子节点名称
             public List Dos { get; set; } = new List();
         }
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    静态事件获得事件参数

    TreeView t=(TreeView)sender;
    TreeViewItem tt=(TreeViewItem)((TreeView)sender).SelectedItem;
    
    • 1
    • 2
  • 相关阅读:
    Vue路由&nodeJS环境搭建
    Python基础复习-面向对象的编程
    如何设计神经网络结构图,神经网络设计与实现
    接口测试当中的权限限制测试和状态机测试【杭州多测师_王sir】【杭州多测师】...
    2的n次幂快速求法
    双指针——移动零
    Python除法
    24.讲二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树
    基于gpio子系统编写LED灯的驱动,编写应用程序测试
    BLEMotion-Kit 支蓝牙运动传感评估套件
  • 原文地址:https://blog.csdn.net/zhtbs/article/details/125440788
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号