Ja, CacheMetadata in Ihrer Aktivität ist, wo Sie Ihre Validierung tun sollten. Validierung ist ein Konzept, das sowohl für die Workflow-Laufzeit als auch für den Designer gilt. (Sie können sehen, aus der Tatsache, dass Sie noch Workflows ausführen können versuchen, kompiliert oder deklarative, die Validierungsfehler, aber eine Ausnahme ausgelöst wird, wenn Sie tun.)
Beispiel:
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"));
}
(Siehe ActivityMetadata.AddValidationError)
Ihre zweite Frage ist, gibt es Unterstützung für das Hinzufügen von Validierung von der ActivityDesigner Seite? Die Antwort ist "nein, nicht wirklich" - es wäre möglich, eine benutzerdefinierte WPF- und Datenbindung durchzuführen, die eine zusätzliche "benutzerdefinierte Validierung" über dem ActivityDesigner hinzufügt, vielleicht sogar AttachedPropertiesService, um Ihre eigene SatisfiesConstraints-Eigenschaft für Ihre Aktivitätsklasse zu definieren . Aber es ist zusätzliche Arbeit, und es wird nicht konsequent mit der Laufzeitvalidierung verbunden sein, also ist es eine Idee mit begrenztem Wert.
Als Hinweis für die Zuschauer funktioniert es nicht immer gut mit WPF. Schließlich habe ich ein Hybridsystem erstellt, bei dem meine Basisklasse (die NativeActivity erweitert) Validierungsfehler von Implementierungen gesammelt und diese sowohl für CacheMetadata-Aufrufe als auch für IDataErrorInfo verwendet hat. – Will