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.pswp.cn/news/280349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/280349.shtml
英文地址,請注明出處:http://en.pswp.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…