首页 技术 正文
技术 2022年11月23日
0 收藏 618 点赞 2,323 浏览 1895 个字

一、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”属性绑定成功!

上一篇: UML——构件图
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,291
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,718
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,554
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,324
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,962
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,123