From 5c33fbc6ee866f7c94e5f2cabcd467ac2ad41a30 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 13 May 2016 16:34:03 +0200 Subject: [PATCH] Reimplemented property validation. As far as it was in `property-validation-grokys` branch. Things were messed up on master so had to merge this manually so may be problems. --- samples/BindingTest/BindingTest.csproj | 3 +- samples/BindingTest/MainWindow.xaml | 8 + .../ExceptionPropertyErrorViewModel.cs | 29 +++ .../ViewModels/MainWindowViewModel.cs | 3 + src/Avalonia.Base/Avalonia.Base.csproj | 6 +- src/Avalonia.Base/AvaloniaObject.cs | 43 ++++- src/Avalonia.Base/Data/IValidationStatus.cs | 17 ++ .../Data/ObjectValidationStatus.cs | 44 +++++ src/Avalonia.Base/Data/ValidationMethods.cs | 13 -- src/Avalonia.Base/Data/ValidationStatus.cs | 30 --- src/Avalonia.Base/IPriorityValueOwner.cs | 2 +- src/Avalonia.Base/PriorityBindingEntry.cs | 2 +- src/Avalonia.Base/PriorityLevel.cs | 3 +- src/Avalonia.Base/PriorityValue.cs | 2 +- .../Avalonia.Controls.csproj | 3 +- src/Avalonia.Controls/Control.cs | 30 +-- .../ControlValidationStatus.cs | 27 --- src/Avalonia.Controls/TextBox.cs | 8 + src/Avalonia.Themes.Default/TextBox.xaml | 3 + .../Avalonia.Markup.Xaml/Data/Binding.cs | 22 ++- .../MarkupExtensions/BindingExtension.cs | 4 +- .../Avalonia.Markup/Avalonia.Markup.csproj | 10 +- .../Avalonia.Markup/Data/ExpressionNode.cs | 4 +- .../Data/ExpressionNodeBuilder.cs | 5 +- .../Data/ExpressionObserver.cs | 52 +++--- .../Avalonia.Markup/Data/ExpressionSubject.cs | 2 +- .../Data/Parsers/ExpressionParser.cs | 23 ++- ...Plugin.cs => ExceptionValidationPlugin.cs} | 36 ++-- ...nCheckerPlugin.cs => IValidationPlugin.cs} | 17 +- ...ckerPlugin.cs => IndeiValidationPlugin.cs} | 27 ++- .../Plugins/ValidatingPropertyAccessorBase.cs | 46 +++++ .../Data/Plugins/ValidationCheckerBase.cs | 34 ---- .../Data/PropertyAccessorNode.cs | 22 ++- .../AvaloniaPropertyRegistryTests.cs | 4 +- .../Avalonia.Controls.UnitTests.csproj | 3 +- .../TextBoxTests_ValidationState.cs | 130 +++++++++++++ .../Avalonia.Markup.UnitTests.csproj | 3 +- .../Data/ExceptionValidatorTests.cs | 24 +-- .../ExpressionObserverTests_Validation.cs | 129 +++++++++++++ .../Data/IndeiValidatorTests.cs | 27 +-- .../Data/BindingTests_Validation.cs | 172 +++++++++++------- 41 files changed, 720 insertions(+), 352 deletions(-) create mode 100644 samples/BindingTest/ViewModels/ExceptionPropertyErrorViewModel.cs create mode 100644 src/Avalonia.Base/Data/IValidationStatus.cs create mode 100644 src/Avalonia.Base/Data/ObjectValidationStatus.cs delete mode 100644 src/Avalonia.Base/Data/ValidationMethods.cs delete mode 100644 src/Avalonia.Base/Data/ValidationStatus.cs delete mode 100644 src/Avalonia.Controls/ControlValidationStatus.cs rename src/Markup/Avalonia.Markup/Data/Plugins/{ExceptionValidationCheckerPlugin.cs => ExceptionValidationPlugin.cs} (62%) rename src/Markup/Avalonia.Markup/Data/Plugins/{IValidationCheckerPlugin.cs => IValidationPlugin.cs} (67%) rename src/Markup/Avalonia.Markup/Data/Plugins/{IndeiValidationCheckerPlugin.cs => IndeiValidationPlugin.cs} (76%) create mode 100644 src/Markup/Avalonia.Markup/Data/Plugins/ValidatingPropertyAccessorBase.cs delete mode 100644 src/Markup/Avalonia.Markup/Data/Plugins/ValidationCheckerBase.cs create mode 100644 tests/Avalonia.Controls.UnitTests/TextBoxTests_ValidationState.cs create mode 100644 tests/Avalonia.Markup.UnitTests/Data/ExpressionObserverTests_Validation.cs diff --git a/samples/BindingTest/BindingTest.csproj b/samples/BindingTest/BindingTest.csproj index 6001b70d31..8ca0a3a66a 100644 --- a/samples/BindingTest/BindingTest.csproj +++ b/samples/BindingTest/BindingTest.csproj @@ -1,4 +1,4 @@ - + @@ -88,6 +88,7 @@ TestItemView.xaml + diff --git a/samples/BindingTest/MainWindow.xaml b/samples/BindingTest/MainWindow.xaml index e8c32d7560..149625925a 100644 --- a/samples/BindingTest/MainWindow.xaml +++ b/samples/BindingTest/MainWindow.xaml @@ -68,6 +68,14 @@ + + + + + + + +