À l'aide de IDataErrorInfo en M-V-VM
Si mon domaine d'objets de mettre en œuvre IDataErrorInfo, et je suis à l'aide de M-V-VM, comment propager les erreurs à travers le ViewModel dans la Vue? Si j'étais directement contraignantes pour le modèle, je mettrais le "ValidateOnExceptons" et "ValidateOnErrors" propriétés de vrai sur ma liaison. Mais mon ViewModel ne pas mettre en œuvre IDataErrorInfo. Seulement mon modèle. Que dois-je faire?
Clarification
Je fais affaire avec une base de code qui implémente IDataErrorInfo dans le domaine des objets. Je ne peux pas simplement mettre en œuvre IDataErrorInfo dans le modèle de vue.
OriginalL'auteur Micah | 2008-12-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez mettre en œuvre IDataErrorInfo de plus dans votre VM et diriger les appels à la VM de votre correspondant objets du domaine. Je pense que c'est le seul moyen sans exposer les objets de domaine directement à la vue.
Je n'ai pas mis en œuvre, mais je pense que vous devez le faire manuellement
Hmm ne semble pas réalisable, je suis à la recherche d'un moyen de dire WPF chercher IDataErrorInfo sur le modèle de vue.
OriginalL'auteur MarioH
si vous êtes à l'aide de M-V-VM, ce Dernier doit définir le IDataErrorInfo interface, pas le modèle.
On pourrait dire que le IDataErrorInfo interface est juste pour la vue et il n'appartient pas dans le modèle, mais c'est une question de style.
Avoir le ViewModel de mettre en œuvre la IDataErrorInfo de l'interface et de propager les erreurs du modèle serait la réponse la plus simple.
Cette réponse contredit les meilleures pratiques à partir de MS (msdn.microsoft.com/en-us/library/gg405484(v=PandP.40).aspx): en règle générale, le modèle met en œuvre les installations qui font qu'il est facile de se lier à la vue. Généralement, cela signifie qu'il prend en charge la propriété et de la collecte changé d'avis à travers les interfaces INotifyPropertyChanged et INotifyCollectionChanged. Le modèle peut également en charge de la validation des données et les rapports d'erreur à travers le IDataErrorInfo (ou INotifyDataErrorInfo) interfaces. Ces interfaces permettent de WPF et Silverlight de liaison de données pour être averti lorsque les valeurs changent, de sorte que l'INTERFACE peut être mise à jour
Je ne suis pas sûr que je suis d'accord avec cela. Le modèle ne doit pas être pollué par des préoccupations de l'INTERFACE utilisateur. Mise en œuvre d'un couple d'interfaces dans le modèle juste pour faire l'INTERFACE utilisateur heureux ne se sent pas bien, qu'est ce que le ViewModel est pour. Alors encore une fois, tout dépend de la complexité du modèle, la taille et le type du projet, etc. Je ne pense pas qu'il y a une vraie réponse. Mais je voudrais essayer de garder le modèle propre de toutes les préoccupations en dehors de la logique métier.
C'est un peu ce que je ressens, mais j'étais juste en soulignant que la réponse de Microsoft semble être (mais ce n'est pas une réponse motivée).
OriginalL'auteur gcores
Il y a un bon article de MSDN Magazine sur ce sujet, des Applications WPF Avec Le Modèle model-View-ViewModel Modèle de Conception: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
Selon cet article, dans Le Modèle de Données et du Référentiel article ( http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090102 ), vous trouverez une mise en œuvre simple. Le Client est l'entité de la classe et du ViewModel obtient les indicateurs d'erreur à partir de l'entité.
Vous pouvez utiliser ValidationsRule pour vérifier la validité des données:
Ceci est un exemple de programme de validation style:
OriginalL'auteur artur02
La BookLibrary exemple d'application de la WPF Cadre applicatif (WAF) pourrait être intéressant pour vous. Il met en œuvre la IDataErrorInfo interface ainsi que sur les objets du domaine et il utilise le M-V-VM modèle.
OriginalL'auteur jbe