public void PropertyOwnersMarkedForGC_BindingReleased() { WeakReference<ViewModel1> wr1 = null; WeakReference<ViewModel2> wr2 = null; new Action( () => { var vm1 = new ViewModel1(); var vm2 = new ViewModel2(); wr1 = new WeakReference<ViewModel1>( vm1 ); wr2 = new WeakReference<ViewModel2>( vm2 ); PropertyBinding.Bind( () => vm1.PrimaryValue, () => vm2.SecondaryValue, BindingMode.TwoWay ); } )(); EnforceGC(); { ViewModel1 vm1; Assert.That( wr1.TryGetTarget( out vm1 ), Is.False ); ViewModel2 vm2; Assert.That( wr2.TryGetTarget( out vm2 ), Is.False ); } }
public void Create_ExpressionWithLocalVariable_OwnerAndPropertyCorrectlyDetected() { var vm = new ViewModel1(); var prop = BindableProperty.Create( () => vm.PrimaryValue ); Assert.That( prop.Owner, Is.EqualTo( vm ) ); Assert.That( prop.PropertyName, Is.EqualTo( "PrimaryValue" ) ); }
public void Create_ExpressionPath_OwnerAndPropertyCorrectlyDetected() { var vm = new ViewModel1(); var prop = BindableProperty.Create( () => vm.Model.ModelValue ); Assert.That( prop.Owner, Is.EqualTo( vm.Model ) ); Assert.That( prop.PropertyName, Is.EqualTo( "ModelValue" ) ); }
public void OneWayToSourceBinding_ChangesOnTargetNotSyncedtoSource() { var vm1 = new ViewModel1(); var vm2 = new ViewModel2(); PropertyBinding.Bind( () => vm1.PrimaryValue, () => vm2.SecondaryValue, BindingMode.OneWayToSource ); vm1.PrimaryValue = 42; Assert.That( vm2.SecondaryValue, Is.Not.EqualTo( 42 ) ); }
public void Create_InstanceAndPropertyName_OwnerAndPropertyCorrectlyDetected() { var vm = new ViewModel1(); var prop = BindableProperty.Create( vm, "PrimaryValue" ); Assert.That( prop.Owner, Is.EqualTo( vm ) ); Assert.That( prop.PropertyName, Is.EqualTo( "PrimaryValue" ) ); }
public void PropertyOwnersStillAlive_BindingsSurvivesGC() { var vm1 = new ViewModel1(); var vm2 = new ViewModel2(); PropertyBinding.Bind( () => vm1.PrimaryValue, () => vm2.SecondaryValue, BindingMode.TwoWay ); EnforceGC(); { // lets see whether binding still works vm1.PrimaryValue = 42; Assert.That( vm2.SecondaryValue, Is.EqualTo( 42 ) ); } }
public void TwoWayBinding_ChangesOnEitherEndSyncedToTheOtherOne() { var vm1 = new ViewModel1(); var vm2 = new ViewModel2(); PropertyBinding.Bind( () => vm1.PrimaryValue, () => vm2.SecondaryValue, BindingMode.TwoWay ); vm1.PrimaryValue = 42; Assert.That( vm2.SecondaryValue, Is.EqualTo( 42 ) ); vm2.SecondaryValue = 24; Assert.That( vm1.PrimaryValue, Is.EqualTo( 24 ) ); }