WPF-18 INotifyPropertyChanged 接口

我们先来看看微软官方给出的定语:通知客户端属性值已经更改。其实对于一个陌生小白来说,很难通过这句话来理解其中的原理,这个接口在WPF和Winform编程中经常会用到,下面是该接口的定义:

namespace System.ComponentModel
{//// Summary://     Notifies clients that a property value has changed.public interface INotifyPropertyChanged{//// Summary://     Occurs when a property value changes.event PropertyChangedEventHandler? PropertyChanged;}
}

我们通过一个简单的例子对比来理解一下它具体作用,我们定义一个普通的Person类,该类没有实现INotifyPropertyChanged接口

public class Person{private string name = String.Empty;public string Name{get{return name;}set{this.name = value;}}}

接下来我们用WPF来实现一个简单的绑定,页面加载的时候在文本框中默认绑定Person属性,我们通过一个按钮来改变对象的属性,来查看文本框中的值是否发生变化

<Grid><Grid.RowDefinitions><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><TextBox Grid.Row="0" Grid.Column="0" Height="30" Width="200" Text="{Binding Path=Name}" ></TextBox><Button x:Name="btnChangeProperty" Width="100" Height="50" Grid.Row="1" Grid.Column="0" Click="btnChangeProperty_Click">更改属性</Button></Grid>
public partial class MainWindow : Window{Person person = new Person();public MainWindow(){InitializeComponent();person.Name = "桂兵兵";this.DataContext = person;}private void btnChangeProperty_Click(object sender, RoutedEventArgs e){person.Name = "桂素伟";}

通过上面的例子我们看到TextBox中的值并没有发生变化

我们让Person来实现INotifyPropertyChanged接口,依然是上面的例子

public class Person : INotifyPropertyChanged{private string name = String.Empty;public string Name{get{return name;}set{if (value != this.name){this.name = value;NotifyPropertyChanged();}}}public event PropertyChangedEventHandler? PropertyChanged;private void NotifyPropertyChanged([CallerMemberName] String propertyName = ""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}
}

当我们看到通过按钮改变实体类属性的时候,页面绑定的值也改变了,这个就是INotifyPropertyChanged接口起到的效果

通俗点讲,当我们绑定一个对象属性的时候,如果该对象实现了INotifyPropertyChanged接口,数据绑定会订阅该接口中的事件,当属性发生变化的时候,会通知到数据绑定!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

头脑风暴 软件_头脑风暴和思维导图的最佳网站和软件

头脑风暴 软件A mind map is a diagram that allows you to visually outline information, helping you organize, solve problems, and make decisions. Start with a single idea in the center of the diagram and add associated ideas, words, and concepts connected ra…

NULL的陷阱:Merge

NULL表示unknown&#xff0c;不确定值&#xff0c;所以任何值&#xff08;包括null值&#xff09;和NULL值比较都是不可知的&#xff0c;在on子句&#xff0c;where子句&#xff0c;Merge或case的when子句中&#xff0c;任何值和null比较的结果都是false&#xff0c;这就是NULL…

Python实现将不规范的英文名字首字母大写

Python实现将不规范的英文名字首字母大写 这篇文章给大家主要介绍的是利用map()函数&#xff0c;把用户输入的不规范的英文名字&#xff0c;变为首字母大写&#xff0c;其他小写的规范名字。文中给出了三种解决方法&#xff0c;大家可以根据需要选择使用&#xff0c;感兴趣的朋…

使用 System.Text.Json 时,如何处理 Dictionary 中 Key 为自定义类型的问题

在使用 System.Text.Json 进行 JSON 序列化和反序列化操作时&#xff0c;我们会遇到一个问题&#xff1a;如何处理字典中的 Key 为自定义类型的问题。背景说明 例如&#xff0c;我们有如下代码&#xff1a;// 定义一个自定义类型 public class CustomType {public int Id { get…

极限编程 (Extreme Programming) - 发布计划 (Release Planning)

编写用户故事后&#xff0c;您可以使用发布计划会议来创建发布计划。发布计划指定 将为每个系统版本实现哪些用户故事以及这些版本的日期。这给出了一组用户故事供客户在迭代计划会议期间进行选择&#xff0c;以便在下一次迭代期间实施。然后将这些选定的故事翻译成单独的编程任…

使用Ubuntu的公用文件夹轻松地在计算机之间共享文件

You’ve probably noticed that Ubuntu comes with a Public folder in your home directory. This folder isn’t shared by default, but you can easily set up several different types of file-sharing to easily share files on your local network. 您可能已经注意到&am…

NSA泄露的恶意软件DoublePulsar感染了数万台Windows电脑

本文讲的是NSA泄露的恶意软件DoublePulsar感染了数万台Windows电脑&#xff0c;安全研究人员认为&#xff0c;世界各地的脚本小子和在线犯罪分子正在利用Shadow Brokers 黑客组织上周泄露的NSA黑客工具&#xff0c;致使全球数十万台Windows计算机正面临网络攻击威胁。 上周&…

Nginx、LVS及HAProxy负载均衡软件的优缺点详解

转自&#xff1a;https://www.csdn.net/article/2014-07-24/2820837 摘要&#xff1a;Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件&#xff0c;一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术&#xff0c;具体的应用需求还得具体分析&…

windows下使用nginx调试简介

安装使用 nginx是一个反向代理服务器&#xff0c;在web开发调试中经常用到&#xff0c;写一个简单的使用说明和总结。 1. 下载 点击官网下载地址 下载对应版本的nginx并解压 2. 配置 在解压的目录下找到conf/nginx.conf文件添加所需监听和代理的server # 项目名称server {liste…

MASA Framework 命令查询职责分离

概念CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一种与领域驱动设计和事件溯源相关的架构模式, 它的全称是Command Query Responsibility Segregation, 又叫命令查询职责分离, Greg Young在2010年创造了这个术语, 它是基于Bertrand Meyer 的…

Google的Project Stream准备在Chrome中播放AAA控制台游戏

Streaming full 3D games over a high-speed web connection is a fast growing trend. And with ridiculous amounts of infrastructure and remote computing power, Google is well equipped to join it. 通过高速网络连接流式传输完整的3D游戏是一种快速增长的趋势。 凭借可…

私有云之迷思:未来是什么?

本文讲的是私有云之迷思&#xff1a;未来是什么&#xff1f;&#xff0c;【编者的话】非常好的一篇文章&#xff0c;作者从OpenStack目前的困境讲起&#xff0c;聊到了私有云的产生背景&#xff0c;进而介绍了云计算的发展史。从云计算诞生的初衷以及现在流行的分布式应用又延伸…

如何在vue中使用sass

安装sass 安装教程链接&#xff1a; https://www.sass.hk/install/ 在vue中使用sass 参考链接&#xff1a; https://www.jianshu.com/p/8e60048baeb7 打开控制台&#xff1a;输入命令行 如果是没有淘宝镜像的&#xff0c;先下载淘宝镜像&#xff0c;之后的下载速度比较快 npm i…

maven项目的目录结构

1、maven项目采用“约定优于配置”的原则&#xff1a; src/main/java&#xff1a;约定用于存放源代码&#xff0c;src/test/java&#xff1a;用于存放单元测试代码&#xff0c;&#xff08;测试代码的包应该和被测试代码包结构保持一致&#xff0c;方便测试查找&#xff09;src…

AWS大力支持.NET 开源项目,和Azure抢.NET 客户

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)在 2022 re:Invent 会议上&#xff0c; AWS 软件开发经理 Saikat Banerjee 锐评道&#xff1a;” 我们发现 .NET 开源项目资金严重不足&#xff0c;仍可称之为第三方开源”。随即表示 AWS 过去非常重视 .net 生态&…

攻防 logmein_如何使用LogMeIn Hamachi在任何地方访问文件

攻防 logmeinWhether you’re at work and forgot some file on your home computer, want to play some music on a train, or just want to move some files between your computers, accessing your files from anywhere is a life saver. 无论您是在工作时忘记了家用计算机…

Docker-machine创建虚机时停在虚机启动的提示上,并且创建的虚机显示Ip Not found...

Docker-machine创建虚机时停在虚机启动的提示上&#xff0c;并且创建的虚机用docker-machine ls 列出来的时候显示Ip Not found&#xff0c; 是什么原因那&#xff1f; 【答案】 看这个帖子&#xff1a; https://github.com/docker/machine/issues/3832 拷贝如下&#xff1a; I…

【年度总结】2016年年度总结

早晨醒来&#xff0c;在被窝里面刷着简书&#xff0c;看到一篇文章叫《深漂一年&#xff0c;一个资深程序员的2016年终告白》&#xff0c;写的很好&#xff0c;很有感触。在2016年的农历的最后一天&#xff0c;总是有很多感触要写下来。所以下午扫墓之后&#xff0c;我也按照剧…

在FC中如何获取fcdot文件

在FlexiCapture中一些客户在问如何获取.fcdot文件(在测试序列号下或者没有测试模板的情况下) 第一步&#xff1a; 1、查看License Manager查看是否找到序列号 首先我们在开始菜单里面打开ABByyFlexiCapTure11——》选择"工具"下的License Manager 第二步 1、选择管理…

Blazor学习之旅 (9) 用MudBlazor重构Todo

【Blazor】| 总结/Edison Zhou大家好&#xff0c;我是Edison。在之前的学习之旅&#xff08;3&#xff09;开发一个Todo应用中&#xff0c;我们开发了一个简单版的Todo&#xff0c;这次我们基于MudBlazor来重构这个Todo应用。Todo V1回顾在Blazor入门学习&#xff08;3&#xf…