一、INotifyPropertyChanged 的基本概念

​ INotifyPropertyChanged 的作用:通知客户端属性值已经更改。详细信息见:INotifyPropertyChanged 接口(Microsoft)。实现接口如下图:

二、优化 INotifyPropertyChanged 接口实现

​ 优化后的 INotifyPropertyChanged 接口实现类如下所示:

 1     class NofifyPropertyChanged : INotifyPropertyChanged
2 {
3 public event PropertyChangedEventHandler PropertyChanged;
4 protected void SetProperty<T>(ref T prop, T value, [CallerMemberName] string propertyName = null)
5 {
6 if (EqualityComparer<T>.Default.Equals(prop, value) == false)
7 {
8 prop = value;
9 OnPropertyChanged(propertyName);
10 }
11 }
12
13 public virtual void OnPropertyChanged(string propertyName)
14 {
15 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
16 }
17 }

​ 例如与 UI 绑定的 ViewModel 如下所示:

    class Window1VM : NofifyPropertyChanged
{
private string _name; public string Name
{
get => _name;
set => SetProperty(ref _name, value);
}
}

三、ViewModel 与 UI 界面绑定

UI 界面如下图所示:

XAML 绑定代码如下图:

 1 <Window x:Class="UI.Window1"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6 xmlns:local="clr-namespace:UI"
7 d:DataContext="{d:DesignInstance local:Window1VM}"
8 mc:Ignorable="d"
9 Title="Window1" Height="250" Width="300">
10 <StackPanel Margin="10" >
11 <TextBlock Text="Name Value(Read and Write):"></TextBlock>
12 <TextBox Margin="0,5,0,5" Height="50" VerticalContentAlignment="Center" BorderBrush="BlueViolet" BorderThickness="3" Text="{Binding Path=Name,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>
13 <TextBlock Text="Name Value(Only Read):"></TextBlock>
14 <TextBox Margin="0,5,0,5" Height="50" VerticalContentAlignment="Center" BorderBrush="BlueViolet" BorderThickness="3" Text="{Binding Path=Name,Mode=OneWay}"></TextBox>
15 </StackPanel>
16 </Window>

在 Window1 界面的后置代码中初始化 ViewModel ,如下图所示:

运行程序后,两个文本框绑定的内容正常显示,当我们改变第一个文本框内的内容时,第二个文本框的内容同步发生变化,这表示,Window1VM 的属性 “Name” 和 Window1.xaml 中文本框的 “Text”属性绑定成功!

最新文章

  1. day1 基础总结
  2. 转载:ZooKeeper Programmer&#39;s Guide(中文翻译)
  3. (转)google Java编程风格中文版
  4. 常用的PHP数据库操作方法(MYSQL版)
  5. 通过PowerShell查看Android端log信息
  6. wxWidgets简单的多线程
  7. 微信企业号 jsSDK wx.config报invalid signature错误,导致api接口无法使用
  8. 机器视觉工具箱-Machine Vision Toolbox for Matlab
  9. WordPress Design Approval System插件‘step’参数跨站脚本漏洞
  10. Content Providers的步骤,来自官网文档
  11. 数据类型 text 和 varchar 在 add 运算符中不兼容
  12. [Usaco2008 Mar]Cow Travelling游荡的奶牛[简单DP]
  13. JavaScript 复制对象
  14. web 分享到facebook
  15. sql server:查詢系統表
  16. 关于Java程序流程控制的整理(已完善)
  17. 【xsy2815】净空 大暴力
  18. REST-framework快速构建API--频率
  19. Ansible Playbook 使用循环语句
  20. linux 添加 swap

热门文章

  1. Centos7安装(本文档采用CentOS7 mini版本)
  2. IntelliJ IDEA实用插件
  3. WPF Line 的颜色过度动画
  4. 白日梦的Elasticsearch笔记(一)基础篇
  5. 【Maven】Maven 高级应用
  6. zookeeper读取事务日志、快照日志
  7. linux之curl工具
  8. P2327 [SCOI2005]扫雷(递推)
  9. 误删除SAP ECC中的profile文件
  10. MySQL数据库基础知识及优化