Maison > développement back-end > C++ > Comment implémenter en toute sécurité INotifyPropertyChanged pour les notifications de changement de valeur de propriété ?

Comment implémenter en toute sécurité INotifyPropertyChanged pour les notifications de changement de valeur de propriété ?

Linda Hamilton
Libérer: 2024-12-30 13:51:10
original
225 Les gens l'ont consulté

How to Safely Implement INotifyPropertyChanged for Property Value Change Notifications?

Comment notifier les changements de valeur de propriété à l'aide d'événements

Pour observer les changements de valeur de propriété, vous pouvez utiliser l'interface INotifyPropertyChanged, qui inclut l'événement PropertyChanged . Les consommateurs peuvent s'abonner à cet événement pour détecter des modifications dans des propriétés spécifiques.

public interface INotifyPropertyChanged
{
    event PropertyChangedEventHandler PropertyChanged;
}
Copier après la connexion

Implémentation sécurisée de INotifyPropertyChanged avec des événements

Alors que la réponse précédente de Richard a introduit une implémentation non sécurisée , voici une version révisée qui garantit la sécurité des threads :

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;
}
Copier après la connexion

Ceci mise en œuvre :

  • Centralise la méthode de notification de changement de propriété pour une application facile à plusieurs propriétés.
  • Évite les conditions de concurrence en faisant une copie du délégué PropertyChanged.
  • Conforme entièrement à l'interface INotifyPropertyChanged.

Modification de propriété spécifique supplémentaire Événement

Pour plus de granularité, vous pouvez définir un événement distinct pour une propriété spécifique, tel que :

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

public event EventHandler ImageFullPathChanged;
Copier après la connexion

Dans le setter de la propriété, invoquez à la fois l'événement général OnPropertyChanged et l'événement général OnPropertyChanged. événement OnImageFullPathChanged spécifique.

Simplification de l'acquisition de nom de propriété (C# 4.5 Uniquement)

Enfin, pour C# 4.5 et supérieur, utilisez CallerMemberAttribute pour extraire automatiquement le nom de la propriété, éliminant ainsi le besoin de littéraux de chaîne manuels :

protected void OnPropertyChanged(
        [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal