• 例子

先来看一个例子

Person.cs

public class Person : ObservableObject,INotifyPropertyChanged
{
private string _testName;
private ObservableCollection<string> _names=new ObservableCollection<string>(); public string TestName
{
get
{
return _testName;
}
set
{
_testName = value;
OnPropertyChanged();
}
} public ObservableCollection<string> Names
{
get { return _names; }
set
{
_names = value;
RaisePropertyChanged(()=>Names);
}
} public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}

MainWindow.xaml.cs

public partial class MainWindow : Window, INotifyPropertyChanged
{
private int _currentId;
private Person _person; public Person Person
{
get
{
return _person;
}
set
{
_person = value;
OnPropertyChanged();
}
} public MainWindow()
{
InitializeComponent(); this.DataContext = this; Person = new Person(); Person.TestName = "TestName";
Person.Names.Add("string"); _currentId = Thread.CurrentThread.ManagedThreadId; DispatcherHelper.Initialize();
} public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
} private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
if (_currentId == Thread.CurrentThread.ManagedThreadId)
{
Person = new Person();
}
else
{
//你认为属性能够更新到界面上吗?
Person.TestName = "NotSame"; //集合呢?
Person.Names.Add("Hello");
}
}); } }

注意注释的地方

结果是TestName属性可以正确更新到UI上,而集合属性Names却不行(这里确实没有搞懂,求教之)。

其余的理解,有一篇写得很好

http://www.cnblogs.com/wpcockroach/p/3909081.html

WPF Binding INotifyPropertyChanged 多线程 深入理解的更多相关文章

  1. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    WPF入门教程系列(二) 深入剖析WPF Binding的使用方法 同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProp ...

  2. WPF Binding

    winform有binding, WPF也有binding,区别在哪呢?这里暂时不提.以前也检查接触WPF binding, 但为什么过段时间就忘记了呢? 可能主要原因自己的知识体系不够完善吧,下面我 ...

  3. 拒绝卡顿——在WPF中使用多线程更新UI

    原文:拒绝卡顿--在WPF中使用多线程更新UI 有经验的程序员们都知道:不能在UI线程上进行耗时操作,那样会造成界面卡顿,如下就是一个简单的示例: public partial class MainW ...

  4. WPF使用 INotifyPropertyChanged 实现数据驱动

    如下图,有这么一个常见需求,在修改表单明细的苹果价格时,总价会改变,同时单据总和也随之改变. 按照Winfrom事件驱动的思想来做的话,我们就需要在将UI的修改函数绑定到CellEdit事件中来实现. ...

  5. WPF binding 参考

    Introduction This is an article on WPF Binding Cheat Sheet. Some of the Binding won't work for Silve ...

  6. WPF Binding值转换器ValueConverter使用简介(二)-IMultiValueConverter

    注: 需要继承IMultiValueConverter接口,接口使用和IValueConverter逻辑相同. 一.MultiBinding+Converter 多值绑定及多值转换实例 当纵向流量大于 ...

  7. WPF Binding值转换器ValueConverter使用简介(一)

    WPF.Silverlight及Windows Phone程序开发中往往需要将绑定的数据进行特定转换,比如DateTime类型的时间转换为yyyyMMdd的日期,再如有一个值是根据另外多组值的不同而异 ...

  8. JavaScript可否多线程? 深入理解JavaScript定时机制(转载)

    说明:最近写 js 时需要用setinterval函数做定时操作,谁知道,刚开始后运行完好,但一段时间后他就抽风了,定时任务运行的时间间隔越来越短,频率加快,这是一个完全不能容忍的问题,带着一个可以出 ...

  9. (转载)Java多线程入门理解

    转载出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更 ...

随机推荐

  1. IOS之Foundation之探究学习Swift实用基础整理<一>

    import Foundation //加载网络数据,查找数据的字符串 let dataurl = "http://api.k780.com:88/?app=weather.city& ...

  2. Mysql 高负载排查思路

    Mysql 高负载排查思路 发现问题 top命令 查看服务器负载,发现 mysql竟然百分之两百的cpu,引起Mysql 负载这么高的原因,估计是索引问题和某些变态SQL语句. 排查思路 1. 确定高 ...

  3. 问题解决——在结构体中使用set保存结构体数据

    =====================声明========================== 本文原创,转载请明确的注明出处和作者,并保持文章的完整性(包括本声明部分). 本文链接:http:/ ...

  4. High Aavialability with Group Replication-by宋利兵

    今天,2016年12月12日, Group Replication GA啦!GA的版本是MySQL-5.7.17. 下载连接如下: http://dev.mysql.com/downloads/mys ...

  5. Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收

    很多Java面试的时候,都会问到有关Java垃圾回收的问题,提到垃圾回收肯定要涉及到JVM内存管理机制,Java语言的执行效率一直被C.C++程序员所嘲笑,其实,事实就是这样,Java在执行效率方面确 ...

  6. Ubuntu查看系统的信息

    转载自:http://blog.chinaunix.net/uid-25885064-id-3440641.html 系统信息 # uname -a # 查看内核/操作系统/CPU信息 # cat / ...

  7. hdu2527哈夫曼编码

    /* Safe Or Unsafe Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...

  8. jmeter的使用(一)

    1.下载jmeter:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter,打开jmeter.bat 3.添加线程组 4.添加http请求 5 ...

  9. 二分法 organ Saltless

    organ [描述] 现在某组织中(记作R)有n个人,他们的联络网形成一棵以Saltless为根的树,有边相连代表两人可以直接联络. 每个人有一个代号,Saltless代号为1,且除Saltless外 ...

  10. 《EXO指数型组织》阅读脑图

    书籍:<EXO指数型组织:打造独角兽公司的11个最强属性> 预览链接:https://www.processon.com/view/link/57ce8279e4b08cbf6ca8f85 ...