WPF 作为展示层技术,华丽的外观和动画,只是它的表层现象;更重要的是,它帮助程序员把思维的重心放在了逻辑层;让展示层永远处于逻辑层的从属地位;由UI驱动,改为数据驱动;其具备这种能力的关键是引入了数据绑定(Data Binding)、依赖属性(Dependency Property)、数据模板(Data Template);
层示层使用WPF类库来实现,所有与业务逻辑和算法相关处理都在逻辑层实现;而层示层与逻辑层的沟通是通过数据绑定(Data Binding)来实现;实现了展示层与逻辑层的解耦,方便开发与测试。
- 数据属性:在WPF中,数据通过属性暴露给外界;
- 数据路径(Path):而UI所关心(绑定)的属性,称为数据路径(Path)
数据属性变更后,如何通知UI,以及UI修改数据后如何通知数据呢?
方法就是在属性的set语句中触发一个PropertyChanged事件;
这个事件,不需要我们去声明,而是继承自位于System.ComponentModel命名空间的INotifyPropertyChange接口;
示例
1、数据源中添加属性,实现INotifyPropertyChange接口,需要通知外面的属性修改时,触发PropertyChanged事件,通知外部哪个属性发生了改变;
using System.ComponentModel;
namespace EBookTool.View
{
public class Account:INotifyPropertyChanged
{
private string name;
private string phone;
public Account()
{
name = "Wangjianjun";
phone = "123456";
}
public string Name {
get => name;
set {
name = value;
//通知发生改变的属性是哪一个
PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"));
}}
public string Phone { get => phone; set => phone = value; }
/// <summary>
/// 继承自INotifyPropertyChanged
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
}
}
2、在UI界面CS文件中,指定数据源
namespace EBookTool.View
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Account();
}
}
}
3、在XAML中将显示数据的UI与属性通过path绑定
运行结果