INotifyPropertyChanged WPF
Quel est le but de INotifyPropertyChanged. Je sais que cet événement est déclenché à chaque fois qu'une propriété est modifiée, mais comment peut-Vue/UI sait que cet événement est déclenché:
Voici mon Client de la classe qui implémente l'INotifyPropertyChanged événement:
public class Customer : INotifyPropertyChanged
{
private string _firstName;
public string LastName { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
}
public string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
OnPropertyChanged("FirstName");
}
}
}
Mais maintenant, les modalités de notification de l'INTERFACE de la propriété a changé. Comme lorsque l'utilisateur affecte la valeur null ou vide pour le premier nom, comment puis-je afficher une MessageBox sur l'INTERFACE utilisateur.
OriginalL'auteur | 2009-06-24
Vous devez vous connecter pour publier un commentaire.
INotifyPropertyChanged permet WPF éléments de l'INTERFACE utilisateur (via le standard de données, les mécanismes de liaison) pour s'abonner à l'événement PropertyChanged et automatiquement mise à jour eux-mêmes. Par exemple, si vous avez eu un TextBlock l'affichage de votre nom de propriété, en utilisant INotifyPropertyChanged, vous pouvez l'afficher dans un formulaire, et il sera automatiquement mis à jour lorsque le Prénom propriété est modifiée dans le code.
La Vue juste s'abonne à l'évènement qui l'informe de tout ce qui est nécessaire. L'événement comprend le nom de la propriété modifiée, de sorte que si un élément de l'INTERFACE utilisateur est lié à celui de la propriété, de la mise à jour.
OriginalL'auteur Reed Copsey
WPF peut le savoir, car il peut vérifier si un objet implémente cette interface, puis jeté à l'objet de ladite interface et de vous inscrire pour l'événement. Il peut alors déclencher la Liaison de l'Infrastructure de mise à jour de l'affichage. Si vous souhaitez réagir ainsi, vous pouvez vous inscrire vous-même pour le même événement.
Si vous n'avez pas vraiment envie de s'attacher à l'événement et faire ce que vous voulez faire dans la mode impératif, vous pourriez être en mesure de le faire de façon déclarative par une combinaison de, par exemple, un Convertisseur de chaîne -> bool encapsulation de votre logique et puis en voiture de la Visibilité de la propriété, avec le résultat booléen. Cependant, je ne vois pas comment afficher une MessageBox de l'intérieur XAML.
OriginalL'auteur flq
EDIT: j'ai relu votre question et certains de vos commentaires. Voici une solution possible en utilisant le DataContextChanged de l'événement et de l'interface INotifyPropertyChanged sur votre Client de l'objet. Vous devriez également regarder dans La Liaison De Données De Validation en WPF et .Net 3.5.
OriginalL'auteur user7116