zoukankan      html  css  js  c++  java
  • 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将会重新评估所有绑定到类的属性的绑定表达式。

  • 相关阅读:
    检测客户端是否安装 Silverlight 插件和判断IE是否安装或支持Silverlight(限IE)
    Silverlight的组合键、快捷键(热键)调用方法
    实现自定义Silverlight版本检测和自定义升级Silverlight运行时方法
    风云的银光志Silverlight4.0系列教程汇总贴
    《银光志—Silverlight 3.0技术详解与最佳实践》创国内最畅销Silverlight技术书籍。
    模拟QQ网络棋牌游戏
    风云的银光志Silverlight4.0教程之轻松操作剪切板
    风云的银光志Silverlight4.0教程之富文本控件RichTextArea(RichTextBox)
    风云的银光志Silverlight4.0教程之使用鼠标右键事件和滚轮事件
    风云的银光志Silverlight4.0教程之WebBrowser(内置浏览器)控件
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/7193074.html
Copyright © 2011-2022 走看看