public void Refresh_OfDelegateProperty_CallsNotifyChangeWhenViewModelInstanceHasChanged() { var oldChild = new ChildVM(); var newChild = new ChildVM(); VM.DelegatePropertyResult = oldChild; VM.Load(x => x.DelegateProperty); VM.DelegatePropertyResult = newChild; VM.OnChangeInvocations.Clear(); VM.Refresh(x => x.DelegateProperty); var expectedArgs = ChangeArgs .ViewModelPropertyChanged( RootVM.ClassDescriptor.DelegateProperty, ValueStage.ValidatedValue, oldChild, newChild) .PrependViewModel(VM); DomainAssert.AreEqual( new[] { expectedArgs }, VM.OnChangeInvocations ); }
public void ViewModelPropertyChanged_SetsOldAndNewItems() { var property = PropertyStub.Build(); var newValue = ViewModelStub.Build(); var args = ChangeArgs.ViewModelPropertyChanged(property, ValueStage.ValidatedValue, null, newValue); CollectionAssert.AreEqual(new IViewModel[0], args.OldItems.ToArray()); CollectionAssert.AreEqual(new IViewModel[] { newValue }, args.NewItems.ToArray()); }
public void ViewModelPropertyChanged_SetsChangeTypeAndChangedPathToProperty() { var property = PropertyStub.Build(); var args = ChangeArgs.ViewModelPropertyChanged(property, ValueStage.Value, null, null); Assert.AreEqual(ChangeType.PropertyChanged, args.ChangeType); Assert.AreEqual(ValueStage.Value, args.Stage); DomainAssert.AreEqual(Path.Empty.Append(property), args.ChangedPath); }
public void HandleChange_WithPropertyChangedOfOwnViewModelProperty_UpdatesCachedResults() { var owner = new TestVM(); owner.MakePropertiesAndViewModelInvalid(); var expected = owner.GetCurrentlySetupResults(); // S E T C H I L D var firstChild = new ViewModelStub { ValidationResult = CreateValidationResult("First child error") }; var propertyChangedArgs = ChangeArgs .ViewModelPropertyChanged( owner.SecondProperty, ValueStage.ValidatedValue, oldValue: null, newValue: firstChild) .PrependViewModel(owner); owner.CallHandleChangeWith(propertyChangedArgs); expected.Descenants = firstChild.ValidationResult; AssertBehaviorResults(owner, expected); // C H A N G E C H I L D var secondChild = new ViewModelStub { ValidationResult = CreateValidationResult("Second child error") }; propertyChangedArgs = ChangeArgs .ViewModelPropertyChanged( owner.SecondProperty, ValueStage.ValidatedValue, oldValue: firstChild, newValue: secondChild) .PrependViewModel(owner); owner.CallHandleChangeWith(propertyChangedArgs); expected.Descenants = secondChild.ValidationResult; AssertBehaviorResults(owner, expected); // S E T C H I L D T O N U L L propertyChangedArgs = ChangeArgs .ViewModelPropertyChanged( owner.SecondProperty, ValueStage.ValidatedValue, oldValue: secondChild, newValue: null) .PrependViewModel(owner); owner.CallHandleChangeWith(propertyChangedArgs); expected.Descenants = ValidationResult.Valid; AssertBehaviorResults(owner, expected); }
public override void NotifyPropertyChanged(IBehaviorContext context, ValueStage stage, TValue oldValue, TValue newValue) { var args = ChangeArgs.ViewModelPropertyChanged( _property, stage, oldValue, newValue, reason: null ); context.NotifyChange(args); }
public void Refresh_ViewModelInstanceHasChanged_RaisesNotifyChange() { var oldChild = new ChildVM(); var newChild = new ChildVM(); ValueAccessor.Value = oldChild; Behavior.GetValue(Context); ValueAccessor.Value = newChild; InvokeRefresh(); var expectedChangeArgs = ChangeArgs.ViewModelPropertyChanged(Property, ValueStage.ValidatedValue, oldChild, newChild, null); DomainAssert.AreEqual(new[] { expectedChangeArgs }, Context.NotifyChangeInvocations); }