定义一个Person实体类:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace Wpf { public class Person : INotifyPropertyChanged { private String _name; private int _age; public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } public String Name { set { _name = value; this.OnPropertyChanged(nameof(Name));//对Name进行监听 } get { return _name; } } public int Age { set { _age = value; this.OnPropertyChanged(nameof(Age)); } get { return _age; } } } }
<TextBlock Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}"/> <TextBlock Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}"/> <!--UpdateSourceTrigger Explicit,源不会更新除非你手动来操作。正因为这个原因,我在这个TextBox旁边添加了一个按钮,用于手动更新源。在后台代码中,我们看到点击事件处理方法里面只有两行代码,第一行获取目标控件的绑定,第二行调用UpdateSource()方法; LostFocus,对于Text绑定来说其实就是一个默认值。也就是说一旦目标控件失去焦点,源就会被更新; PropertyChanged,一旦绑定的属性值改变,源会立即更新。本例中文本改变就产生这种效果;-->
这样就可以实现数据源变动UI就是实时更改,前端用户手动修改数据源也会进行刷新;