C# Language Implémenter INotifyPropertyChanged en C # 6


Exemple

L'implémentation de INotifyPropertyChange peut être INotifyPropertyChange erreurs, car l'interface nécessite de spécifier le nom de la propriété en tant que chaîne. Afin de rendre l'implémentation plus robuste, un attribut CallerMemberName peut être utilisé.

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

Si vous avez plusieurs classes implémentant INotifyPropertyChanged , vous pouvez trouver utile de refactoriser l'implémentation de l'interface et la méthode d'assistance dans la classe de base commune:

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