第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

每當(dāng)屬性值更改時(shí)引發(fā)一個(gè)事件?

每當(dāng)屬性值更改時(shí)引發(fā)一個(gè)事件?

BIG陽(yáng) 2019-10-15 09:18:00
有一個(gè)屬性,它名為ImageFullPath1public string ImageFullPath1 {get; set; }每當(dāng)值改變時(shí),我都會(huì)觸發(fā)一個(gè)事件。我知道更改INotifyPropertyChanged,但是我想通過(guò)事件來(lái)更改。
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

該INotifyPropertyChanged接口是與事件實(shí)現(xiàn)。該界面只有一個(gè)成員,PropertyChanged這是消費(fèi)者可以訂閱的事件。


理查德發(fā)布的版本不安全。以下是安全實(shí)現(xiàn)此接口的方法:


public class MyClass : INotifyPropertyChanged

{

    private string imageFullPath;


    protected void OnPropertyChanged(PropertyChangedEventArgs e)

    {

        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)

            handler(this, e);

    }


    protected void OnPropertyChanged(string propertyName)

    {

        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));

    }


    public string ImageFullPath

    {

        get { return imageFullPath; }

        set

        {

            if (value != imageFullPath)

            {

                imageFullPath = value;

                OnPropertyChanged("ImageFullPath");

            }

        }

    }


    public event PropertyChangedEventHandler PropertyChanged;

}

請(qǐng)注意,這將執(zhí)行以下操作:


抽象屬性更改通知方法,以便您可以輕松地將其應(yīng)用于其他屬性;


在嘗試調(diào)用PropertyChanged代理之前,先制作該代理的副本(否則,將創(chuàng)建競(jìng)爭(zhēng)條件)。


正確實(shí)現(xiàn)INotifyPropertyChanged接口。


如果要為更改的特定屬性另外創(chuàng)建通知,則可以添加以下代碼:


protected void OnImageFullPathChanged(EventArgs e)

{

    EventHandler handler = ImageFullPathChanged;

    if (handler != null)

        handler(this, e);

}


public event EventHandler ImageFullPathChanged;

然后在該行OnImageFullPathChanged(EventArgs.Empty)之后添加該行OnPropertyChanged("ImageFullPath")。


由于我們有.Net 4.5,因此存在CallerMemberAttribute,它可以擺脫源代碼中屬性名稱的硬編碼字符串:


    protected void OnPropertyChanged(

        [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")

    {

        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));

    }


    public string ImageFullPath

    {

        get { return imageFullPath; }

        set

        {

            if (value != imageFullPath)

            {

                imageFullPath = value;

                OnPropertyChanged();

            }

        }

    }


查看完整回答
反對(duì) 回復(fù) 2019-10-15
?
縹緲止盈

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊

我使用與Aaronaught大致相同的模式,但是如果您有很多屬性,最好使用一些通用方法魔術(shù)使代碼更干燥。


public class TheClass : INotifyPropertyChanged {

    private int _property1;

    private string _property2;

    private double _property3;


    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {

        PropertyChangedEventHandler handler = PropertyChanged;

        if(handler != null) {

            handler(this, e);

        }

    }


    protected void SetPropertyField<T>(string propertyName, ref T field, T newValue) {

        if(!EqualityComparer<T>.Default.Equals(field, newValue)) {

            field = newValue;

            OnPropertyChanged(new PropertyChangedEventArgs(propertyName));

        }

    }


    public int Property1 {

        get { return _property1; }

        set { SetPropertyField("Property1", ref _property1, value); }

    }

    public string Property2 {

        get { return _property2; }

        set { SetPropertyField("Property2", ref _property2, value); }

    }

    public double Property3 {

        get { return _property3; }

        set { SetPropertyField("Property3", ref _property3, value); }

    }


    #region INotifyPropertyChanged Members


    public event PropertyChangedEventHandler PropertyChanged;


    #endregion

}

通常,我還將OnPropertyChanged方法設(shè)為虛擬,以允許子類覆蓋它以捕獲屬性更改。


查看完整回答
反對(duì) 回復(fù) 2019-10-15
?
12345678_0001

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊

INotifyPropertyChanged正是在屬性更改時(shí)引發(fā)事件。要實(shí)現(xiàn)INotifyPropertyChanged,需要一個(gè)成員,即PropertyChanged事件。您自己實(shí)現(xiàn)的任何內(nèi)容都可能與該實(shí)現(xiàn)相同,因此不使用它沒有任何好處。


查看完整回答
反對(duì) 回復(fù) 2019-10-15
  • 3 回答
  • 0 關(guān)注
  • 703 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)