@@ -491,7 +491,7 @@ public void Test_ObservableRecipient_ValidationOnNonValidatableProperties(Type t
491
491
{
492
492
ObservableValidatorBase viewmodel = ( ObservableValidatorBase ) Activator . CreateInstance ( type ) ! ;
493
493
494
- viewmodel . ValidateAll ( ) ;
494
+ viewmodel . ValidateAllProperties ( ) ;
495
495
}
496
496
497
497
// See: https://github.com/CommunityToolkit/WindowsCommunityToolkit/issues/4272
@@ -565,6 +565,50 @@ public void Test_ObservableValidator_WithGenericTypeParameters()
565
565
Assert . IsFalse ( model . HasErrors ) ;
566
566
}
567
567
568
+ // See https://github.com/CommunityToolkit/dotnet/issues/691
569
+ [ TestMethod ]
570
+ public void Test_ObservableValidator_ValidateAllProperties_IncludeInheritedProperties ( )
571
+ {
572
+ DerivedModelWithValidatableProperties model = new ( ) ;
573
+ List < DataErrorsChangedEventArgs > events = new ( ) ;
574
+
575
+ model . ErrorsChanged += ( s , e ) => events . Add ( e ) ;
576
+
577
+ model . ValidateAllProperties ( ) ;
578
+
579
+ Assert . IsTrue ( model . HasErrors ) ;
580
+ Assert . IsTrue ( events . Count == 2 ) ;
581
+
582
+ Assert . IsTrue ( events . Any ( e => e . PropertyName == nameof ( DerivedModelWithValidatableProperties . Name ) ) ) ;
583
+ Assert . IsTrue ( events . Any ( e => e . PropertyName == nameof ( DerivedModelWithValidatableProperties . Number ) ) ) ;
584
+
585
+ events . Clear ( ) ;
586
+
587
+ model . Number = 42 ;
588
+
589
+ model . ValidateAllProperties ( ) ;
590
+
591
+ Assert . IsTrue ( model . HasErrors ) ;
592
+ Assert . IsTrue ( events . Count == 2 ) ;
593
+
594
+ Assert . IsTrue ( events . Any ( e => e . PropertyName == nameof ( DerivedModelWithValidatableProperties . Name ) ) ) ;
595
+ Assert . IsTrue ( events . Any ( e => e . PropertyName == nameof ( DerivedModelWithValidatableProperties . Number ) ) ) ;
596
+
597
+ Assert . AreEqual ( 1 , model . GetErrors ( nameof ( DerivedModelWithValidatableProperties . Name ) ) . Count ( ) ) ;
598
+ Assert . AreEqual ( 0 , model . GetErrors ( nameof ( DerivedModelWithValidatableProperties . Number ) ) . Count ( ) ) ;
599
+
600
+ events . Clear ( ) ;
601
+
602
+ model . Name = "Bob" ;
603
+ model . Number = 80 ;
604
+
605
+ model . ValidateAllProperties ( ) ;
606
+
607
+ Assert . IsFalse ( model . HasErrors ) ;
608
+ Assert . IsTrue ( events . Count == 1 ) ;
609
+
610
+ Assert . IsTrue ( events . Any ( e => e . PropertyName == nameof ( DerivedModelWithValidatableProperties . Name ) ) ) ; }
611
+
568
612
public class Person : ObservableValidator
569
613
{
570
614
private string ? name ;
@@ -786,9 +830,9 @@ public class ObservableValidatorBase : ObservableValidator
786
830
{
787
831
public int ? MyDummyInt { get ; set ; } = 0 ;
788
832
789
- public void ValidateAll ( )
833
+ public new void ValidateAllProperties ( )
790
834
{
791
- ValidateAllProperties ( ) ;
835
+ base . ValidateAllProperties ( ) ;
792
836
}
793
837
}
794
838
@@ -824,6 +868,17 @@ public abstract class AbstractModelWithValidatableProperty : ObservableValidator
824
868
public string ? Name { get ; set ; }
825
869
}
826
870
871
+ public class DerivedModelWithValidatableProperties : AbstractModelWithValidatableProperty
872
+ {
873
+ [ Range ( 10 , 1000 ) ]
874
+ public int Number { get ; set ; }
875
+
876
+ public new void ValidateAllProperties ( )
877
+ {
878
+ base . ValidateAllProperties ( ) ;
879
+ }
880
+ }
881
+
827
882
public class GenericPerson < T > : ObservableValidator
828
883
{
829
884
[ Required ]
0 commit comments