Looking for c# Keywords? Try Ask4Keywords

C# Language Внедрение INotifyPropertyChanged в C # 6


пример

Реализация INotifyPropertyChange может быть подвержена ошибкам, так как интерфейс требует указания имени свойства как строки. Чтобы сделать реализацию более надежной, можно использовать атрибут CallerMemberName .

class C : INotifyPropertyChanged
{
    // backing field
    int offset;
    // property
    public int Offset
    {
        get
        {
            return offset;
        }
        set
        {
            if (offset == value)
                return;
            offset = value;
            RaisePropertyChanged();
        }
    }

    // helper method for raising PropertyChanged event
    void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    // interface implemetation
    public event PropertyChangedEventHandler PropertyChanged;
}

Если у вас несколько классов, реализующих INotifyPropertyChanged , вам может оказаться полезным реорганизовать реализацию интерфейса и вспомогательный метод для общего базового класса:

class NotifyPropertyChangedImpl : INotifyPropertyChanged
{
    protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    // interface implemetation
    public event PropertyChangedEventHandler PropertyChanged;
}

class C : NotifyPropertyChangedImpl
{
    int offset;
    public int Offset
    {
        get { return offset; }
        set { if (offset != value) { offset = value; RaisePropertyChanged(); } }
    }
}