C#接口INotifyPropertyChanged使用方法
INotifyPropertyChanged:
該接口包含一個(gè)事件, 針對(duì)屬性發(fā)生變更時(shí), 執(zhí)行該事件發(fā)生。
//
// 摘要:
// 通知客戶端屬性值已更改。
public interface INotifyPropertyChanged
{
//
// 摘要:
// 在屬性值更改時(shí)發(fā)生。
event PropertyChangedEventHandler PropertyChanged;
}接下來, 用一個(gè)簡(jiǎn)單的示例說明其簡(jiǎn)單使用方法(大部分常用的做法演示):
1.定義一個(gè)ViewModelBase 繼承INotifyPropertyChanged 接口, 添加一個(gè)虛函數(shù)用于繼承子類的屬性進(jìn)行更改通知
2.MainViewModel中兩個(gè)屬性, Code,Name 進(jìn)行了Set更改時(shí)候的調(diào)用通知,
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public class MainViewModel : ViewModelBase
{
private string name;
private string code;
public string Name
{
get { return name; }
set { name = value; OnPropertyChanged("Name"); }
}
public string Code
{
get { return code; }
set { code = value; OnPropertyChanged("Code"); }
}
}正如上面的代碼, 應(yīng)該注意到了, 每個(gè)屬性調(diào)用OnPropertyChanged的時(shí)候, 都需要傳一個(gè)自己的屬性名, 這樣是不是很多余?對(duì), 很多余。
改造
看到有些文章給基類的參數(shù)修改為表達(dá)式樹, 這樣實(shí)現(xiàn)的時(shí)候,傳遞一個(gè)Lambda表達(dá)式, 我覺得這是不治標(biāo)不治本嗎?如下:

說明: 原來直接傳遞一個(gè)固定的string類型實(shí)參, 不說換成lambda的性能問題, 同樣帶來的問題你還是固定的需要去書寫這個(gè)參數(shù)。 不建議這么做!
CallerMemberName
該類繼承與 Attribute, 不難看出, 該類屬于定義在方法和屬性上的一種特效類, 實(shí)現(xiàn)該特性允許獲取方法調(diào)用方的方法或?qū)傩悦Q
//
// 摘要:
// 允許獲取方法調(diào)用方的方法或?qū)傩悦Q。
[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
public sealed class CallerMemberNameAttribute : Attribute
{
//
// 摘要:
// 初始化 System.Runtime.CompilerServices.CallerMemberNameAttribute 類的新實(shí)例。
public CallerMemberNameAttribute();
}改造ViewModelBase:

改造之后, 是不是發(fā)現(xiàn)明顯區(qū)別:
不用傳遞參數(shù), 不用書寫lambda表達(dá)式, 也不用擔(dān)心其傳遞的參數(shù)安全, 直接根據(jù)讀取屬性名!
到此這篇關(guān)于C#接口INotifyPropertyChanged使用方法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
DevExpress實(shí)現(xiàn)GridControl顯示Gif動(dòng)畫的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl顯示Gif動(dòng)畫的方法,這是比較實(shí)用的方法,需要的朋友可以參考下2014-08-08
Unity接入百度AI實(shí)現(xiàn)通用物體和場(chǎng)景識(shí)別
這篇文章主要介紹了在Unity中接入百度AI接口,從而實(shí)現(xiàn)通用物體和場(chǎng)景的識(shí)別,其中接口返回大類及細(xì)分類的名稱,并支持獲取識(shí)別結(jié)果對(duì)應(yīng)的百科信息。感興趣的可以學(xué)習(xí)一下2022-01-01

