@@ -491,7 +491,7 @@ public void Test_ObservableRecipient_ValidationOnNonValidatableProperties(Type t
491491 {
492492 ObservableValidatorBase viewmodel = ( ObservableValidatorBase ) Activator . CreateInstance ( type ) ! ;
493493
494- viewmodel . ValidateAll ( ) ;
494+ viewmodel . ValidateAllProperties ( ) ;
495495 }
496496
497497 // See: https://github.com/CommunityToolkit/WindowsCommunityToolkit/issues/4272
@@ -565,6 +565,50 @@ public void Test_ObservableValidator_WithGenericTypeParameters()
565565 Assert . IsFalse ( model . HasErrors ) ;
566566 }
567567
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+
568612 public class Person : ObservableValidator
569613 {
570614 private string ? name ;
@@ -786,9 +830,9 @@ public class ObservableValidatorBase : ObservableValidator
786830 {
787831 public int ? MyDummyInt { get ; set ; } = 0 ;
788832
789- public void ValidateAll ( )
833+ public new void ValidateAllProperties ( )
790834 {
791- ValidateAllProperties ( ) ;
835+ base . ValidateAllProperties ( ) ;
792836 }
793837 }
794838
@@ -824,6 +868,17 @@ public abstract class AbstractModelWithValidatableProperty : ObservableValidator
824868 public string ? Name { get ; set ; }
825869 }
826870
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+
827882 public class GenericPerson < T > : ObservableValidator
828883 {
829884 [ Required ]
0 commit comments