public void PropertyObserver_Getter_Observes_instance_IntProperty() { var instance = new NotifyPropertyChangedClass1() { Class2 = null }; var callCount = 0; using var observes = PropertyValueObserver.ObservesAndGet(instance, i => i.Class2.IntProperty, () => callCount++); Assert.AreEqual(0, callCount); Assert.AreEqual(null, observes.Value); instance.Class2 = new NotifyPropertyChangedClass2 { IntProperty = 1 }; Assert.AreEqual(0, callCount); Assert.AreEqual(1, observes.Value); observes.Activate(); Assert.AreEqual(1, callCount); Assert.AreEqual(1, observes.Value); instance.Class2.IntProperty = 2; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); observes.Deactivate(); Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); instance.Class2.IntProperty = 3; Assert.AreEqual(2, callCount); Assert.AreEqual(3, observes.Value); instance.Class2 = null; Assert.AreEqual(2, callCount); Assert.AreEqual(null, observes.Value); }
/// <summary> /// Initializes a new instance of the <see cref="CanExecuteObserver{TOwner}" /> class. /// </summary> /// <param name="parameter">The owner.</param> /// <param name="canExecuteExpression">The can execute expression.</param> /// <exception cref="ArgumentNullException"> /// parameter /// or /// canExecuteExpression is null. /// </exception> public CanExecuteObserver( [NotNull] TParameter1 parameter, [NotNull] Expression <Func <TParameter1, bool> > canExecuteExpression) { if (parameter == null) { throw new ArgumentNullException(nameof(parameter)); } if (canExecuteExpression == null) { throw new ArgumentNullException(nameof(canExecuteExpression)); } this.Parameter = parameter; var observesAndGet = PropertyValueObserver.ObservesAndGet( parameter, canExecuteExpression, () => this.Update.Raise(), false); this.Observer = observesAndGet; this.CanExecute = () => observesAndGet.GetValue(); }
public void PropertyObserver_OnNotifyProperyChanged_Observes_instance_IntProperty_Cashed_TaskSchedulerCurrent_AutoActivateTrue() { var instance = new NotifyPropertyChangedClass1() { Class2 = null }; var callCount = 0; using var observes = PropertyValueObserver.ObservesOnNotifyProperyChanged <int>(() => instance.Class2.IntProperty, true, LazyThreadSafetyMode.None, TaskScheduler.Current, true); observes.PropertyChanged += (sender, args) => callCount++; Assert.AreEqual(0, callCount); Assert.AreEqual(null, observes.Value); instance.Class2 = new NotifyPropertyChangedClass2 { IntProperty = 1 }; Assert.AreEqual(1, callCount); Assert.AreEqual(1, observes.Value); instance.Class2.IntProperty = 2; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); instance.Class2.IntProperty = 2; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); observes.Deactivate(); Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); instance.Class2.IntProperty = 3; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); }
public void PropertyObserver_OnValueChanged_Observes_instance_IntProperty_AutoActivateTrue() { var instance = new NotifyPropertyChangedClass1() { Class2 = null }; var callCount = 0; using var observes = PropertyValueObserver.ObservesOnValueChanged <int>(() => instance.Class2.IntProperty, true); observes.PropertyChanged += (sender, args) => callCount++; Assert.AreEqual(0, callCount); Assert.AreEqual(null, observes.Value); instance.Class2 = new NotifyPropertyChangedClass2 { IntProperty = 1 }; Assert.AreEqual(1, callCount); Assert.AreEqual(1, observes.Value); instance.Class2.IntProperty = 2; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); instance.Class2.IntProperty = 2; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); observes.Deactivate(); Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); instance.Class2.IntProperty = 3; Assert.AreEqual(2, callCount); Assert.AreEqual(2, observes.Value); }