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
276 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!

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