如果数据绑定的目标是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. 主从热备+负载均衡(LVS + keepalived)

    前言 淘宝架构师李智慧大牛的书籍<大型网站技术架构>以及旭龙兄的博客  --->[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡. 从上参考而得来本文,本文旨 ...

  2. Linux 源码安装 FFmpeg

    加班次数频繁,已经快一年没有写博了.由于此次在项目中使用到了 FFmpeg 来处理音视频,顾记录下在 Linux 系统中源码安装 FFmpeg 以便不时之需. 1. 安装 yasm yasm 是一个汇 ...

  3. mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据

    记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接 ...

  4. php模拟post提交请求,调用接口

    /** * 模拟post进行url请求 * @param string $url * @param string $param */ function request_post($url = '', ...

  5. Windows环境使用Nexus-3.x搭建Maven私服

    [前言] 本文主要讲解在Wiindows环境下搭建最新出的Nexus 3.x私服. 1.搭建私服的必要性 一般情况下,各个公司的开发团队为了提高开发效率,都会使用项目构建工具进行开发.常见的构建工具有 ...

  6. SQL Server 中的一些概念

    学习SQL Server 2012编程入门经典(第4版)的笔记 1.事务日志 任意数据库的更改起初不进入数据库本身,而是不断地被写入到事务日志. 日志是数据进入磁盘上的最先位置. 2.表 数据库中实际 ...

  7. blfs(systemv版本)学习笔记-制作一个简单的桌面系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 大概思路: lfs(系统)+xorg(驱动)+i3-wm(窗口+桌面)+lightdm(显示管理器+登录管理器) 链接: lfs ...

  8. ASP.NET MVC4分页Site.CSS

    ASP.NET MVC 4 的基础分页的CSS样式: body { font-family: Calibri,Georgia,"Times New Roman"; margin:; ...

  9. 【CSS学习】--- 文本样式

    一.前言 CSS文本属性可以定义文本的外观.通过文本属性,可以定义文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. CSS常用的文本属性目录: text-align 文本对齐属性 te ...

  10. 使用bootstrap的JS插件实现模态框效果

    在上一篇文章中,我们使用 js+css 实现了模态框效果,在理解了模态框的基本实现方法和实现效果后,我们就要寻找更快捷的方法,又快又好的来完成模态框开发需求,从而节约时间,提高效率.一个好的轮子,不仅 ...