zoukankan      html  css  js  c++  java
  • Binding自动侦听

    WPF的强大之一就是数据绑定,Binding是数据桥梁,它的两端是分别是源(Source)和目标(Target),一个简单的类的属性值发生变化,会自动反映在UI界面上,这个属性就是Binding的Path路径,那么如何自动反映在UI界面上的呢?其实就是数据源要实现INotifyPropertyChanged接口,其属性的set语句中实现一个PropertyChanged事件,当为Binding设置数据源后,Binding就会自动侦听来自这个接口的PropertyChanged事件

    看看下面例子,类Stuent实现接口,Name属性set中添加事件,这样此Name变化会反映到UI界面上

      class Student : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value;
                    if (this.PropertyChanged != null)
                        this.PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                }
            }
        }

    用代码在后台绑定到UI界面上的textBox文件框上,如下

    textBox.SetBinding(TextBox.TextProperty,new Binding("Name"){Source=stu=new Student()});

    或在控件上直接写绑定:

        

       <TextBox x:Name="textBox" Text="{Binding Name}" />

    在初始化窗口中添加数据源:

     public MainWindow()
            {
                InitializeComponent();
                student = new Student()
                {
                    Name = "张三"
                };
    
                this.textBox.DataContext = student;
             }
            Student student;

    在项目中,可以PropertyChanged事件可以提取成基类,使用代码简洁一些

     class NotifyObject : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
    
            public void RaisePropertyChanged(string name)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }

    在属性中就可以这样写:

    class Student : NotifyObject
        {
    
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value;
                    RaisePropertyChanged("Name");
                }
            }
        }
  • 相关阅读:
    python django blog
    Django框架的学习
    Django 与 Flask框架的比较
    pycharm windows 远程修改服务器代码
    matlab的Deep Learning的toolbox 中的SAE算法
    什么是有监督学习和无监督学习
    linux 操作系统rz sz 快速上传和下载文件
    PDF,word ,PPT,等各种文件转换在线工具(免费)
    linux 安装 rz sz 快速上传和下载文件
    sci-hub 下载地址更新
  • 原文地址:https://www.cnblogs.com/lunawzh/p/4804036.html
Copyright © 2011-2022 走看看