91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#的INotifyPropertyChanged接口怎么使用

發布時間:2022-01-26 14:16:07 來源:億速云 閱讀:392 作者:zzz 欄目:開發技術

這篇文章主要介紹“C#的INotifyPropertyChanged接口怎么使用”,在日常操作中,相信很多人在C#的INotifyPropertyChanged接口怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C#的INotifyPropertyChanged接口怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

INotifyPropertyChanged:

該接口包含一個事件, 針對屬性發生變更時, 執行該事件發生。

    //
    // 摘要:
    //     通知客戶端屬性值已更改。
    public interface INotifyPropertyChanged
    {
        //
        // 摘要:
        //     在屬性值更改時發生。
        event PropertyChangedEventHandler PropertyChanged;
    }

接下來, 用一個簡單的示例說明其簡單使用方法(大部分常用的做法演示):

1.定義一個ViewModelBase 繼承INotifyPropertyChanged 接口, 添加一個虛函數用于繼承子類的屬性進行更改通知

2.MainViewModel中兩個屬性, Code,Name 進行了Set更改時候的調用通知,

     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"); }
        }
    }

正如上面的代碼, 應該注意到了, 每個屬性調用OnPropertyChanged的時候, 都需要傳一個自己的屬性名, 這樣是不是很多余?對, 很多余。

改造

看到有些文章給基類的參數修改為表達式樹, 這樣實現的時候,傳遞一個Lambda表達式, 我覺得這是不治標不治本嗎?如下:

C#的INotifyPropertyChanged接口怎么使用

說明: 原來直接傳遞一個固定的string類型實參, 不說換成lambda的性能問題, 同樣帶來的問題你還是固定的需要去書寫這個參數。 不建議這么做!

CallerMemberName

該類繼承與 Attribute, 不難看出, 該類屬于定義在方法和屬性上的一種特效類, 實現該特性允許獲取方法調用方的方法或屬性名稱

    //
    // 摘要:
    //     允許獲取方法調用方的方法或屬性名稱。
    [AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
    public sealed class CallerMemberNameAttribute : Attribute
    {
        //
        // 摘要:
        //     初始化 System.Runtime.CompilerServices.CallerMemberNameAttribute 類的新實例。
        public CallerMemberNameAttribute();
    }

改造ViewModelBase:

C#的INotifyPropertyChanged接口怎么使用

改造之后, 是不是發現明顯區別:

不用傳遞參數, 不用書寫lambda表達式, 也不用擔心其傳遞的參數安全, 直接根據讀取屬性名!

到此,關于“C#的INotifyPropertyChanged接口怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

屏东市| 蒙山县| 梅河口市| 依安县| 遂宁市| 杂多县| 台南县| 班玛县| 和田市| 舞钢市| 南和县| 温宿县| 沾化县| 安庆市| 九龙城区| 建阳市| 钦州市| 米脂县| 靖宇县| 宜昌市| 盐津县| 时尚| 盐城市| 蒙阴县| 株洲县| 宁乡县| 宁远县| 通山县| 信丰县| 博野县| 甘孜| 廉江市| 吕梁市| 油尖旺区| 亚东县| 齐河县| 平陆县| 大埔县| 靖边县| 松阳县| 长顺县|