Evénement NotifyPropertyChanged où les arguments d'événement contiennent l'ancienne valeur
Est-il un INotifyPropertyChanged-comme l'interface où l'événement args contient l'ancienne valeur de la propriété d'être changé, ou dois-je prolonger cette interface pour créer un?
Par exemple:
public String ProcessDescription
{
get { return _ProcessDescription; }
set
{
if( value != ProcessDescription )
{
String oldValue = _ProcessDescription;
_ProcessDescription = value;
InvokePropertyChanged("ProcessDescription", oldvalue);
}
}
}
InvokePropertyChanged(String PropertyName, OldValue)
{
this.PropertyChanged( new ExtendedPropertyChangedEventArgs(PropertyName, OldValue) );
}
Je voudrais également vous contenter d'une PropertyChanging-comme l'événement qui donne cette information, si oui ou non il prend en charge l'e.Annuler.
source d'informationauteur Alain | 2011-10-06
Vous devez vous connecter pour publier un commentaire.
Comme indiqué par les réponses, j'ai dû mettre en place mon propre solution. Pour le bénéfice des autres, je vous ai présenté ici:
L'Étendue Événement PropertyChanged
Cet événement a été spécialement conçu pour être compatible avec les anciennes propertyChanged événements. Il peut être utilisé de façon interchangeable avec le simple PropertyChangedEventArgs par les appelants. Bien sûr, dans de tels cas, il est de la responsabilité du gestionnaire d'événements pour vérifier si le passé PropertyChangedEventArgs peut être abattu à un PropertyChangedExtendedEventArgs, si ils veulent l'utiliser. Pas passer n'est nécessaire si tous qu'ils sont intéressés à la PropertyName propriété.
L'Étendue PropertyChanged Interface
Si, le programmeur a voulu créer un événement qui forces la notification propriétés à inclure une ancienne valeur et la nouvelle valeur, ils ont besoin d'implémenter l'interface suivante:
Exemple 1
L'utilisateur peut maintenant spécifier un plus avancées
NotifyPropertyChanged
méthode qui permet d'accesseurs de propriété à passer dans leur ancienne valeur:Où votre nouveau
NotifyPropertyChanged
méthode ressemble à ceci:Et
OnPropertyChanged
est toujours la même:Exemple 2
Ou si vous préférez utiliser des expressions lambda et de faire disparaître codée en dur le nom de propriété des chaînes entièrement, vous pouvez utiliser les éléments suivants:
Qui est pris en charge par la suite de magic:
Performance
Si la performance est un sujet de préoccupation, voir à cette question: La mise en œuvre de NotifyPropertyChanged sans chaînes magiques.
En résumé, la charge est minime. L'ajout de l'ancienne valeur et de passer à l'étendue de l'événement est d'environ 15% de ralentissement, en permettant encore de l'ordre de un million de notifications de propriété par seconde, et de passer à des expressions lambda est un 5 fois le ralentissement permettant d'environ une centaine de milliers de notifications de propriété par seconde. Ces chiffres sont loin d'être en mesure de former un goulot d'étranglement dans une INTERFACE utilisateur pilotée par l'application.
Sonne comme vous voulez utiliser le
INotifyPropertyChanging
en conjonction avecINotifyPropertyChanged
. La Documentation Msdn http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanging.aspxSi vous ne voulez ancienne valeur, vous pouvez invoquer l'événement avant de changer la valeur de la propriété. Mais que serait un départ de la façon dont cet événement est utilisé normalement, je voudrais donc créer une interface dédiée et args.
Non, vous devez créer votre propre à partir de zéro.
J'ai utilisé pour faire la même chose dans mon projet de recherche, le Granit, mais je suis venu à la conlcusion que ça ne valait pas le coût. De trop nombreuses propriétés qui je travaille sont calculés, et les exécuter à la fois pour déclencher un événement était trop coûteux.