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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

3 回答

?
慕碼人8056858

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

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


理查德發(fā)布的版本不安全。以下是安全實現(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;

}

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


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


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


正確實現(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();

            }

        }

    }


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

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

我使用與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è)為虛擬,以允許子類覆蓋它以捕獲屬性更改。


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

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

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


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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