在上节介绍 WPF中的数据绑定方式 时,我知道 ,建立数据绑定时,需要作如下处理:
- 待绑定数据类实现INotifyPropertyChange;
- 需暴露给外界的属性发改变时,触发PropertyChanged事件,事件的参数为属性的名称;
- 将数据类作为数据源绑定到界面上;
- 在XAML中通过Path 指定绑定的属性。
在这些操作中将数据类作为数据源绑定到界面上时,是通过给DataContext赋值的方式绑定的。
当一个控件Binding数据源时,只指定的Path,而不知道Source,会沿着UI元素树,一路往上查找;每个结点,都要查看下该节点的DataContext是否包含Path指定的属性。
DataContext属性是被定义在FrameworkElement类里的,这个类是所有WPF控件的基类,这意味着所有WPF控件都具备这个属性; 这也意味着,我们可以在XAML中设置DataContext,进一步解耦界面与逻辑代码。
为了将界面与业务逻辑解耦,我们将数据和业务逻辑纳入单独的类文件,新建一个名为MainWindowViewModel.cs的类文件;并定义界面数据源
namespace EBookTool.View
{
public class MainWindowViewModel
{
private Account _Data = new Account();
public Account AccountData
{
get {
return _Data;
}
set
{
_Data = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("AccountData"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}```
界面XAML中修改代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210415105207984.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JpdG9MaW5r,size_16,color_FFFFFF,t_70)
这里我们UI相关的文件中,除了.xaml文件,CS文件变得非常简单;不再包含任何同数据和业务逻辑相关的代码
```csharp
namespace EBookTool.View
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}