Maison >développement back-end >C++ >Comment déclencher un événement personnalisé lorsqu'une valeur de propriété change en C# ?

Comment déclencher un événement personnalisé lorsqu'une valeur de propriété change en C# ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-01 01:16:10984parcourir

How to Raise a Custom Event When a Property Value Changes in C#?

Comment déclencher un événement lorsque la valeur d'une propriété change

Vous avez une propriété nommée ImageFullPath1 que vous souhaitez déclenche un événement chaque fois que sa valeur change. Bien que vous sachiez utiliser l'interface INOtifyPropertyChanged, vous préférez utiliser des événements à cette fin.

L'interface INOtifyPropertyChanged est, en fait, implémentée avec des événements. Il a un seul membre, PropertyChanged, qui est un événement auquel les consommateurs peuvent souscrire.

Mise en œuvre sécurisée :

Le code suivant L'extrait démontre une implémentation sécurisée de l'interface INOtifyPropertyChanged avec un événement supplémentaire pour une propriété spécifique. (ImageFullPath) :

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

    protected void OnImageFullPathChanged(EventArgs e)
    {
        EventHandler handler = ImageFullPathChanged;
        if (handler != null)
            handler(this, e);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public event EventHandler ImageFullPathChanged;
}

Cette implémentation garantit les éléments suivants :

  • Méthodes abstraites de notification de changement de propriété pour une application facile à d'autres propriétés
  • Copie le délégué PropertyChanged avant de l'invoquer pour éviter les conditions de concurrence
  • Mise en œuvre correcte du INotifyPropertyChanged interface

CallerMemberAttribute dans .NET 4.5 :

Pour .NET 4.5 et supérieur, le CallerMemberAttribute peut être utilisé pour éliminer la chaîne codée en dur pour les noms de propriétés dans le code source :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn