diff --git a/src/Markup/Perspex.Markup/Data/ExpressionNode.cs b/src/Markup/Perspex.Markup/Data/ExpressionNode.cs
index e989a72177..a120aa8901 100644
--- a/src/Markup/Perspex.Markup/Data/ExpressionNode.cs
+++ b/src/Markup/Perspex.Markup/Data/ExpressionNode.cs
@@ -105,6 +105,11 @@ namespace Perspex.Markup.Data
CurrentValue = reference;
}
+ protected virtual void SendValidationStatus(ValidationStatus status)
+ {
+ _subject?.OnNext(status);
+ }
+
protected virtual void Unsubscribe(object target)
{
}
diff --git a/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs b/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs
index e5b0d1ac78..082aaf652b 100644
--- a/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs
+++ b/src/Markup/Perspex.Markup/Data/ExpressionObserver.cs
@@ -28,6 +28,17 @@ namespace Perspex.Markup.Data
new InpcPropertyAccessorPlugin(),
};
+ ///
+ /// An ordered collection of validation checker plugins that can be used to customize
+ /// the validation of view model and model data.
+ ///
+ public static readonly IList ValidationCheckers =
+ new List
+ {
+ new IndeiValidationCheckerPlugin(),
+ new ExceptionValidationCheckerPlugin()
+ };
+
private readonly WeakReference _root;
private readonly Func