WPFの数据源事件变更通知

如果数据绑定的目标是TextBox元素的Text属性,那么默认会使用双向绑定(Mode.TwoWay),此时用户可以通过更改TextBox元素Text属性的值从而更新源属性信息,但是如果在程序代码中更新源属性(此时源属性不是依赖属性)的信息,那么TextBox元素的Text属性不会同时进行更新,这时就会出现问题,因为用户不知道源属性中的数据已经被修改,对于此问题可以通过下面的方法解决:

1.将所有的源属性更改为依赖属性。

2.为每个属性引发一个事件(如:porpertyNameChanged的事件)。

3.可以实现System.ComponentModel.INotifyPropertyChanged接口,该接口需要一个名称为PropertyChanged的事件。无论何时属性发生变化都会引发PropertyChanged事件,并且通过将属性名称作为字符串指示哪个属性发生了变化。当属性发生变化时仍然需要引发事件,但是不需要为每个属性定义一个单独的事件。

4.还可以使用FrameworkElement.GetBindingExpression方法得到BindingExpression对象,并调用对象的UpdateTarget方法触发一个更新,这种方法不见意使用,因为实现起来有些勉强。

见意使用第3种方法。‍

第3种方法的CS代码如下所示:

‍    public class Stu:INotifyPropertyChanged
    {
        private int myid;
        private string mynames;
        private int myage;
        private string mysex;
        private string myaddress;

        public int id
        {
            get { return myid; }
            set { myid = value; OnPropertyChanged(new PropertyChangedEventArgs("id")); }
        }

        public string names
        {
            get { return mynames; }
            set { mynames = value; OnPropertyChanged(new PropertyChangedEventArgs("names")); }
        }

        public int age
        {
            get { return myage; }
            set { myage = value; OnPropertyChanged(new PropertyChangedEventArgs("age")); }
        }

        public string sex
        {
            get{return mysex;}
            set { mysex = value; OnPropertyChanged(new PropertyChangedEventArgs("sex")); }
        }

        public string address
        {
            get { return myaddress; }
            set { myaddress = value;OnPropertyChanged(new PropertyChangedEventArgs("address")); }
        }

        #region INotifyPropertyChanged 成员

       public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged(PropertyChangedEventArgs e)
        {
            if (PropertyChanged!=null)
            {
                PropertyChanged(this, e);
            }
        }

        #endregion
    }

说明:

如果调用上面的方法‍OnPropertyChanged(new PropertyChangedEventArgs("")); ‍时,为PropertyChangedEventArgs参数提供一个空字符串,那么WPF将会重新评估所有绑定到类的属性的绑定表达式。

原文地址:https://www.cnblogs.com/xietianjiao/p/7193074.html