Oui, CacheMetadata dans votre activité est l'endroit où vous devriez effectuer votre validation. La validation est un concept qui s'applique à l'exécution du workflow ainsi qu'au concepteur. (Vous pouvez voir cela du fait que vous pouvez essayer d'utiliser les flux de travail, compilés ou déclaratives, qui ont des erreurs de validation, mais une exception sera levée lorsque vous faites.)
Exemple:
protected override void CacheMetadata(ActivityMetadata metadata)
{
if (this.Body == 0) metadata.AddValidationError(
new ValidationError(
"You forgot to supply a body for (this activity)",
/*iswarning = */ true,
"Body"));
}
(Voir ActivityMetadata.AddValidationError)
Votre question secondaire est de savoir s'il est possible d'ajouter une validation du côté de ActivityDesigner? La réponse est 'non, pas vraiment' - il serait possible de faire un WPF personnalisé et une liaison de données qui ajoute une 'validation personnalisée' au dessus de ActivityDesigner, peut-être même utiliser AttachedPropertiesService pour définir votre propre propriété SatisfiesConstraints sur votre classe d'activité . Mais c'est un travail supplémentaire, et cela ne va pas être lié à la validation de l'exécution de manière cohérente, donc c'est une idée de valeur limitée.
Comme une note pour les téléspectateurs, il ne fonctionne pas toujours bien avec WPF. J'ai finalement créé un système hybride où ma classe de base (extension de NativeActivity) rassemblait les erreurs de validation des implémentations et les utilisait à la fois pour les appels CacheMetadata et pour IDataErrorInfo. – Will