Comment puis-je faire un événement qui est déclenché lorsqu'une variable ou une propriété est modifiée (ou peut je viens de mettre le code, je mettrais dans un événement dans l'Ensemble de la section d'une propriété?
PublicClass DemoCustomer
Implements INotifyPropertyChanged
Private customerNameValue AsString=String.Empty
PublicEvent PropertyChanged As PropertyChangedEventHandler _
Implements INotifyPropertyChanged.PropertyChanged
PrivateSub NotifyPropertyChanged(ByVal info AsString)RaiseEvent PropertyChanged(Me,New PropertyChangedEventArgs(info))EndSubPublicProperty CustomerName()AsStringGetReturnMe.customerNameValue
EndGetSet(ByVal value AsString)IfNot(value = customerNameValue)ThenMe.customerNameValue = value
NotifyPropertyChanged("CustomerName")EndIfEndSetEndPropertyEndClass
quelles seraient les implications de simplement mettre un Sub dans le Set section de la propriété? Personnellement, je pense que c'est un peu défaut que vous avez à augmenter manuellement l'événement que vous avez défini. Si vous pouviez obtenir de l'événement à l'auto-raise puis-je voir le point à la définition d'un événement, sinon, il suffit de mettre le code ou un appel à une Sous - dans l'incubateur.
Oui, le meilleur (si ce n'est la seule) façon de le faire est de cacher complètement la variable réelle (le rendre Privé) et de l'exposer au travers d'une Propriété qui déclenche des événements à chaque fois que le setter est utilisé.
Je le fais régulièrement, mais j'ai trouvé qu'il est important de ne PAS augmenter l'événement, si la nouvelle valeur est similaire à l'ancienne valeur. Cela élimine les appels de fonction et les empêche parfois récursive événements.
Grand point de ne pas élever l'événement sur un non-changement-j'ai vu cela cause des problèmes avec la liaison de données WPF. Il n'est souvent pas un réel besoin pour un événement, n'oubliez pas que vous pouvez faire presque n'importe quoi dans un setter. que voulez-vous dire si elles sont similaires? disons que vous avez une Propriété qui est lié à un entier Privé appelé m_index. Dans le setter, avant vous augmentez le cas, ajouter cette ligne: if (valeur = m_index) Puis Retour
Canonique événement pour ce qui est de la PropertyChanged événement, qui est défini dans le INotifyPropertyChanged interface. Vous pouvez augmenter ce à partir de votre propriété setters. (Notez que VB.NET n'élèvera pas le cas pour vous: vous devez inclure le code de la soulever.)
Si le code que vous voulez exécuter sur un changement est logiquement au sein de votre classe (par exemple, mise à jour d'un client quand la balance des changements), il est approprié de mettre cela dans le setter de la propriété, plutôt que dans un gestionnaire d'événement. Les gestionnaires d'événements sont pour un code externe a besoin de savoir à propos des modifications, par exemple pour mettre à jour l'INTERFACE utilisateur en réponse à l'état des clients en train de changer.
Prendre un coup d'oeil à cet exemple mise en œuvre de l'interface INotifyPropertyChanged, c'est la méthode standard utilisée pour cette fonctionnalité. Les parties importantes sont la NotifyPropertyChanged méthode et le code à l'intérieur de la propriété de définir des gestionnaires d'événements.
De la MSDN entrée de la bibliothèque
INotifyPropertyChanged.Événement PropertyChanged
:Sub
dans leSet
section de la propriété?Personnellement, je pense que c'est un peu défaut que vous avez à augmenter manuellement l'événement que vous avez défini. Si vous pouviez obtenir de l'événement à l'auto-raise puis-je voir le point à la définition d'un événement, sinon, il suffit de mettre le code ou un appel à une Sous - dans l'incubateur.
OriginalL'auteur Aviad P.
Oui, le meilleur (si ce n'est la seule) façon de le faire est de cacher complètement la variable réelle (le rendre Privé) et de l'exposer au travers d'une Propriété qui déclenche des événements à chaque fois que le setter est utilisé.
Je le fais régulièrement, mais j'ai trouvé qu'il est important de ne PAS augmenter l'événement, si la nouvelle valeur est similaire à l'ancienne valeur. Cela élimine les appels de fonction et les empêche parfois récursive événements.
Il n'est souvent pas un réel besoin pour un événement, n'oubliez pas que vous pouvez faire presque n'importe quoi dans un setter.
que voulez-vous dire si elles sont similaires?
disons que vous avez une Propriété qui est lié à un entier Privé appelé m_index. Dans le setter, avant vous augmentez le cas, ajouter cette ligne: if (valeur = m_index) Puis Retour
OriginalL'auteur David Rutten
Canonique événement pour ce qui est de la
PropertyChanged
événement, qui est défini dans leINotifyPropertyChanged
interface. Vous pouvez augmenter ce à partir de votre propriété setters. (Notez que VB.NET n'élèvera pas le cas pour vous: vous devez inclure le code de la soulever.)Si le code que vous voulez exécuter sur un changement est logiquement au sein de votre classe (par exemple, mise à jour d'un client quand la balance des changements), il est approprié de mettre cela dans le setter de la propriété, plutôt que dans un gestionnaire d'événement. Les gestionnaires d'événements sont pour un code externe a besoin de savoir à propos des modifications, par exemple pour mettre à jour l'INTERFACE utilisateur en réponse à l'état des clients en train de changer.
OriginalL'auteur itowlson
Prendre un coup d'oeil à cet exemple mise en œuvre de l'interface INotifyPropertyChanged, c'est la méthode standard utilisée pour cette fonctionnalité. Les parties importantes sont la NotifyPropertyChanged méthode et le code à l'intérieur de la propriété de définir des gestionnaires d'événements.
OriginalL'auteur Rory