如果数据绑定的目标是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将会重新评估所有绑定到类的属性的绑定表达式。

WPFの数据源事件变更通知的更多相关文章

  1. WPF 在事件中绑定命令(不可以在模版中绑定命令)

    其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实现将命令绑定到事件中. 上一篇中我们介绍了MVVMLight中的命令的用法,那么仅仅知道命令是 ...

  2. WPF自学入门(三)WPF路由事件之内置路由事件

    有没有想过在.NET中已经有了事件机制,为什么在WPF中不直接使用.NET事件要加入路由事件来取代事件呢?最直观的原因就是典型的WPF应用程序使用很多元素关联和组合起来,是否还记得在WPF自学入门(一 ...

  3. WPF路由事件二:路由事件的三种策略

    一.什么是路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件.路由事件是一个CLR事件. 路由事件与一般事件的区别在于:路由事件是一种用于元素树的事件 ...

  4. WPF 在事件中绑定命令

    导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...

  5. WPF 路由事件 Event Routing

    原文:WPF 路由事件 Event Routing 1.路由事件介绍 之前介绍了WPF的新的依赖属性系统,本篇将介绍更高级的路由事件,替换了之前的.net普通事件.相比.net的事件,路由事件具有更强 ...

  6. WPF 委托 事件 B窗体调用A窗体方法

    原文:WPF 委托 事件 B窗体调用A窗体方法 具体实现 A窗体 中加载B窗体  B窗体触发A窗体里的方法 当点击B窗体确定Button事件   给A窗体俩个TextBox赋值 并关闭B窗体 B窗体 ...

  7. WPF 路由事件总结

    1.什么是路由事件 已下为MSDN中的定义 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由 R ...

  8. .NET: WPF 路由事件

    (一)使用WPF内置路由事件 xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://sc ...

  9. WPF 路由事件

    最近想封装一个关于手势的控件,但是由其他的控件覆盖之后发现不能触发,据说是有一些事件在定义的时候就处理过e.Handle了. 定义的时候就处理了,就是为了控件能够正常的工作,别如Button.Mous ...

随机推荐

  1. Java 8 新特性-菜鸟教程 (5) -Java 8 Stream

    Java 8 Stream Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种 ...

  2. sql server备份和还原

    官方文档:http://msdn.microsoft.com/zh-cn/library/ms187048%28v=sql.90%29.aspx

  3. U3D Time类

    Time.time 表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算. Time.timeSinceLevelLoad 表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止. Tim ...

  4. MySQL中的事务及读写锁实现并发访问控制

    一.并发控制中锁的概念 锁是并发控制中最核心的概念之一,在MySQL中的锁分两大类,一种是读锁,一种是写锁,读锁也可以称为共享锁(shared lock),写锁也通常称为排它锁(exclusive l ...

  5. C# json反序列化 对象中嵌套数组 (转载)

    看图: 这里可以看到是二层嵌套!!使用C#如何实现?? 思路:使用list集合实现 → 建立类 → list集合 → 微软的   Newtonsoft.Json  (一款.NET中开源的Json序列化 ...

  6. angularjs学习第八天笔记(指令作用域研究)

    您好,在前两天对指令的简单了解和系统指令学习后 今天主要研究其指针作用域的相关事情 每一个指令在创建时,其实就构成了自己的一个小的模块单元. 其对于的模块单元都有着其对于的作用域,其中作用域一般有两种 ...

  7. AIMLBot (中文自动回复)文本自动回复机器人

    https://github.com/chivandikwa/AIMLBot (csharp) https://github.com/gunthercox/ChatterBot (python) ht ...

  8. 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...

  9. mock数据的基础使用

    一.应用场景 在我们自己做一个项目时,会遇到后端还没完成数据输出或者接口没写好的情况.你没有办法想后台获取数据,这时候需要前端只好自己写静态模拟数据(假数据).mockjs就是用来创造假数据的,他的用 ...

  10. 【读书笔记】iOS-微信公众平台开发最佳实践

    一,微信是由腾讯公司广州研发中心产品团队开发,该团队经理张小龙被称为“微信之父”,公司总裁马化腾确定该产品名称为“微信”. 二,常见问题及解决方案. 1,请求URL超时. 这种情况一般是由于服务器网速 ...