2010-07-01 7 views
0

Je suis assez nouveau pour Silverlight et RIA. Cependant, nous développons une application avec une interface SL utilisant WCF/RIA pour se connecter à notre couche de service. Nous utilisons le modèle mvvm, ce qui peut jouer dans ce cas également.Comment convertir des exceptions de couche de gestion en erreurs de validation dans SL4?

J'ai une forme de données particulière où j'utilise la commande pour accrocher l'événement EditEnding du formulaire de données. Dans EditEnding, j'appelle mon service pour enregistrer l'objet édité. Le service effectue une validation robuste sur l'objet et génère actuellement des exceptions que je piège dans mon viewmodel et affiche avec MessageBox.

Je veux afficher ces exceptions comme des erreurs de validation plutôt que de les afficher avec des messages. J'ai vu quelques articles qui parlent de nouveau INotifyDataErrorInfo de SL4s et peut-être c'est une solution; mais je suis un peu confus quant à la façon dont cela est réellement mis en œuvre. L'autre chose est que j'ai l'impression que INotifyDataErrorInfo est utilisé pour provoquer la validation des propriétés "immédiates" (d'une seule propriété à la fois) plutôt que de permettre à un utilisateur de valider un objet entier dans la couche service lorsque l'utilisateur appuie sur le bouton Envoyer .

Une exigence que j'ai à cause de nos utilisateurs et de leurs problèmes de latence élevée, c'est que l'application ne soit pas trop bavarde. Donc, je ne veux pas que le client fasse des appels au service pour chaque propriété éditée dans le formulaire de données.

Quelqu'un peut-il faire la lumière sur la façon dont je peux accomplir cela?

Merci d'avance!

Répondre

0

Sans voir plus comment votre commande viewmodel interagit avec votre objet métier et la façon dont vous souhaitez afficher les erreurs alors ceci est ma suggestion ...

Si vous souhaitez afficher un ensemble bien formé d'erreurs sur la vue Lorsque vous interceptez les erreurs de validation de la commande execute, ajoutez-les à une collection observable que vous pouvez lier à la vue. Cela peut être simplement une liste liée à la collection et lorsque vous essayez d'enregistrer la prochaine fois que vous pouvez effacer la collection. Comme INotifyDataErrorInfo, INotifyDataErrorInfo est vraiment pour des validations simples et pour des réponses rapides car il sera invoqué par l'interface utilisateur chaque fois qu'une propriété liée change donc pas un bon endroit pour appeler un service sur le réseau.

HTH

+0

Merci pour votre réponse. Existe-t-il un moyen d'ajouter ces exceptions aux erreurs de validation qui sont déjà affichées dans le formulaire de données ... la liste des erreurs de validation? – RHarris

0

avec des erreurs de INotifyDataerrors sont affichés sur l'écran quand vous voulez. C'est dès que votre modèle Vie déclenche un événement pour avertir l'interface qu'une nouvelle erreur a été découverte.

Malheureux services Rias implémentent pour vous INotifyDataErrors, et ils utilisent juste des erreurs provenant d'annotations de données. Ainsi, si vous souhaitez utiliser les services Ria, vous devez écrire des annotations de données personnalisées pour évaluer toutes les erreurs. Il existe également des annotations de données au niveau de la classe. Vous pouvez valider n'importe quoi avec des annotations de données. De plus, si vous n'indiquez pas d'extension .share.cs à ces annotations de données, elles ne seront utilisées que sur le serveur et non sur le client ... Pour plus d'infos, veuillez lire la série d'annotations de données sur mon blog here. Si vous souhaitez utiliser les pls d'exception, utilisez ma boîte à outils de validation pour WPF et silverlight au lieu du service Ria. Il est disponible gratuitement sur le codeplex here.