Le pattern MVVM, IDataErrorInfo et de Liaison pour l'erreur d'affichage?
Sur MSDN Magazine il a un bon article sur le modèle MVVM et elles sont contraignantes pour l'erreur de validation dans le code Xaml pour Validation.ErrorTemplate="{x:Null}"
. Je ne comprends pas pourquoi et comment ils peuvent afficher à partir de la IDataErrorInfo l'erreur? Quelqu'un peut éclairer moi sur la façon d'obtenir le message d'erreur affiché à l'écran avec le MVVM approche?
Vous devez vous connecter pour publier un commentaire.
J'ai été regardant le même échantillon de quelques minutes ago. Votre supposition est righ. Dans cet exemple de code qu'ils ont enlevé par défaut ErrorTemplate de contrôle de zone de sorte qu'il ne serait pas montrer rectangle rouge. Au lieu d'utiliser ErrorTemplate ils créent ContentProvider avec le contenu lié à l'erreur de validation de zone de texte spécifique.
Lorsque vous lier à un objet qui prend en charge IDataErrorInfo, il ya plusieurs caractéristiques de la WPF de Liaison de la classe à prendre en compte:
ValidatesOnDataErrors doit être Vrai. Cela indique WPF à rechercher et à utiliser le IDataError interface de l'objet sous-jacent.
La propriété attachée de Validation.HasError sera définie sur true sur la cible de l'objet si l'objet source est IDataError interface signalé un problème de validation. Vous pouvez ensuite utiliser cette propriété avec déclencheur à modifier l'info-bulle de la commande pour afficher le message d'erreur de validation (je fais cela dans mon projet actuel et de l'utilisateur final, il aime).
La Validation.Les erreurs attachées à la propriété contient une énumération de tout résultat validationresult les erreurs résultant de la dernière tentative de validation. Si vous allez avec l'info-bulle de l'approche, l'utilisation d'un IValueConverter pour récupérer uniquement le premier élément... sinon, vous courez en liaison erreurs pour afficher le message d'erreur lui-même.
La classe binding expose NotifyOnValidationError, qui lorsque la valeur est True, va provoquer des événements routés à bulle en haut de la limite de contrôle chaque fois qu'une règle de validation de l'état des modifications. Ceci est utile si vous souhaitez mettre en place un gestionnaire d'événement dans le conteneur des contrôles liés, et ensuite d'ajouter et de supprimer les messages de validation à partir d'un listbox.
Il y a des échantillons sur MSDN pour faire à la fois le style de commentaires (les info-bulles ainsi que la zone de liste), mais je vais coller ci-dessous le code que j'ai roled pour mettre en œuvre l'info-bulle des commentaires sur mon DataGridCells et des zones de texte...
La DataGridCell style:
La zone de texte du style:
La ErrorContentConverter (pour la récupération de la première message d'erreur de validation pour l'info-bulle):
...et enfin un exemple d'utilisation du style dans une zone de texte:
Voici le code que j'ai utilisé pour à la fois l'affichage de l'erreur dans l'info-bulle Ou Une petite bulle à côté du contrôle.
Définir le Style.
À l'aide de Contrôle.
Exemple De Modèle De Classe.
à la Clientèle de classe : INotifyPropertyChanged, IDataErrorInfo
{
private string prenom;
private string nom;
}
Ergonomie de l'INTERFACE utilisateur.
De ce que je devine que c'est que la Validation.ErrorTemplate="{x:Null}" supprimer le rectangle rouge lorsqu'une erreur est présente. Cela peut être réglé pour être en mesure de ne pas avoir le rectangle rouge autour de la zone de texte lorsque le formulaire de démarrage.
Pour l'erreur de montrer à l'écran, j'ai vu quelque part dans le code :
Content="{Binding ElementName=lastNameTxt, Path=(Validation.Errors).CurrentItem}"
, donc, je suis toujours à deviner que c'est Lier à la zone de texte (pas le modèle de données) et de vérifier si elle a erreur statique de Validation.Les erreurs qui peuvent se connecter à la IDataErroInfo à partir du modèle de données?Suis-je raison?