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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }