public void Test_BindSource_IndexPropertyInt() { var viewModel = new TestViewModel(); var bindSource = new BindContext(viewModel, "TestViewModel2.TestViewModel3.IntValues[1]"); var viewModel2 = new TestViewModel2(); viewModel.TestViewModel2 = viewModel2; var viewModel3 = new TestViewModel3(); viewModel2.TestViewModel3 = viewModel3; Assert.AreEqual(null, bindSource.PropertyType); Assert.AreEqual(null, bindSource.Value); var list = new ObservableCollection<int>(); viewModel3.IntValues = list; Assert.AreEqual(list, bindSource.Source); Assert.AreEqual(typeof(int), bindSource.PropertyType); Assert.AreEqual(default(int), bindSource.Value); list.Add(1); list.Add(2); Assert.AreEqual(2, bindSource.Value); bindSource.Value = 2; Assert.AreEqual(2, list[1]); list.RemoveAt(1); Assert.AreEqual(default(int), bindSource.Value); }
public void Test_BindSource_IndexPropertyDictionary() { var viewModel = new TestViewModel(); var bindSource = new BindContext(viewModel, "TestViewModel2.StringValues[yohan]"); Assert.IsNull(bindSource.Source); Assert.IsNull(bindSource.Value); var viewModel2 = new TestViewModel2(); viewModel.TestViewModel2 = viewModel2; Assert.IsNull(bindSource.Source); Assert.IsNull(bindSource.Value); var dictionary = new Dictionary<string, string>(); viewModel.TestViewModel2.StringValues = dictionary; Assert.AreEqual(dictionary, bindSource.Source); Assert.IsNull(bindSource.Value); viewModel.TestViewModel2.StringValues = new Dictionary<string, string>(); viewModel.TestViewModel2.StringValues.Add("yohan", "1"); Assert.AreEqual("1", bindSource.Value); }
public void Test_WeakSource_SetBinding() { var viewModel = new TestViewModel(); var view = new TestView(); var ws = new WeakTarget(view); ws.SetBinding<WeakPropertyBinding>("Text1", viewModel, "Name"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); NotSupportedException exception = null; try { ws.SetBinding<WeakNotifyBinding>("Text1", viewModel, "Name"); } catch(NotSupportedException e) { exception = e; } Assert.IsNotNull(exception); }
public void Test_MemoryLeak_BindSource() { var v = new TestViewModel(); var v2 = new TestViewModel2(); var reference = new WeakReference(v); var reference2 = new WeakReference(v2); int changeCount = 0; var bindSource = new BindContext(v, "TestViewModel2.Name"); bindSource.SourceMode = SourceMode.Property; bindSource.SourceChanged += (sender, args) => { changeCount++; Assert.AreNotEqual(args.OldSource, args.NewSource); Assert.AreEqual(SourceMode.Property, args.SourceMode); }; v.TestViewModel2 = v2; Assert.AreEqual(0, changeCount); v2 = null; v.TestViewModel2 = null; GC.Collect(); Assert.IsFalse(reference2.IsAlive); v = null; GC.Collect(); Assert.IsFalse(reference.IsAlive); GC.KeepAlive(bindSource); }
public void Test_WeakNotify_OneWay() { var viewModel = new TestViewModel(); var view = new TestView(); int changedCount = 0; BindingValueChangedHandler changeHandler = (source, args) => { changedCount++; Assert.IsTrue(args.Data != null); Assert.IsNull(args.OldValue); Assert.IsNull(args.NewValue); }; new WeakNotifyBinding(viewModel, "Age", view, null) .Initialize<WeakNotifyBinding>() .AttachSourceEvent("TestViewEvent") .OfType<WeakNotifyBinding>().SetSourceChanged(changeHandler); Assert.AreEqual(0, changedCount); GC.Collect(); view.RaiseTestViewEvent(); Assert.AreEqual(1, changedCount); }
public void Test_MemoryLeak_WeakBinding_AttachEvent() { var viewModel = new TestViewModel(); var viewModel2 = new TestViewModel2(); var reference = new WeakReference(viewModel2); var reference2 = new WeakReference(viewModel); WeakBinding binding = new WeakPropertyBinding(viewModel2, "Name", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.TwoWay) .AttachTargetEvent("TestViewModelEvent"); viewModel.Name = Name1; Assert.AreEqual(viewModel2.Name, Name1); viewModel2.Name = Name2; Assert.AreNotEqual(viewModel.Name, Name2); viewModel2.RaiseTestViewModelEvent(); Assert.AreEqual(viewModel.Name, Name2); viewModel2 = null; GC.Collect(); Assert.IsFalse(reference.IsAlive); viewModel = null; GC.Collect(); Assert.IsFalse(reference2.IsAlive); GC.KeepAlive(binding); }
public void Test_WeakCommandBinding_CanExecuteChangedCallback() { var viewModel = new TestViewModel(); var view = new TestView(); Assert.IsFalse(view.Enable); bool isEnable = false; WeakCommandBinding commandBinding = new WeakCommandBinding(view, null, viewModel, "AddAgeCommand") .Initialize<WeakCommandBinding>() .AttachTargetEvent("TestViewEvent") .OfType<WeakCommandBinding>() .AddEnableProperty("Enable") .Watch("Age") .SetCanExecuteChanged((sender, args) => { isEnable = args.CanExecute; }); Assert.IsTrue(view.Enable); Assert.IsTrue(isEnable); Assert.AreEqual(0, viewModel.Age); view.RaiseTestViewEvent(); Assert.AreEqual(1, viewModel.Age); Assert.IsTrue(view.Enable); Assert.IsTrue(isEnable); commandBinding.SetCanExecuteChanged(null); viewModel.Age++; Assert.IsFalse(view.Enable); Assert.IsTrue(isEnable); }
public void Test_WeakEntry_Equals() { var viewModel = new TestViewModel(); var viewModel2 = new TestViewModel(); var weakEntry = new WeakEntry("Text1", viewModel, "Name"); var weakEntry1 = new WeakEntry("Text1", viewModel2, "Name"); var weakEntry2 = new WeakEntry("Text2", viewModel, "Name"); var weakEntry3 = new WeakEntry("Text1", viewModel, "Age"); var weakEntry4 = new WeakEntry("Text1", viewModel, "Name"); var weakEntry5 = new WeakEntry(string.Empty, viewModel, "Name"); var weakEntry6 = new WeakEntry("Text2", viewModel, string.Empty); Assert.IsFalse(weakEntry.Equals(weakEntry1)); Assert.IsFalse(weakEntry.Equals(weakEntry2)); Assert.IsFalse(weakEntry.Equals(weakEntry3)); Assert.IsFalse(weakEntry1.Equals(weakEntry2)); Assert.IsFalse(weakEntry1.Equals(weakEntry3)); Assert.IsFalse(weakEntry2.Equals(weakEntry5)); Assert.IsFalse(weakEntry2.Equals(weakEntry6)); Assert.IsTrue(weakEntry1 != weakEntry3); Assert.IsTrue(weakEntry.Equals(weakEntry4)); Assert.IsTrue(weakEntry == weakEntry4); }
public void Test_BindingEngine_ClearBinding_Object() { var viewModel = new TestViewModel(); var viewModel2 = new TestViewModel2(); BindingEngine.SetPropertyBinding(viewModel2, "Name", viewModel, "Name") .SetMode(BindMode.TwoWay); viewModel.Name = Name1; Assert.AreEqual(viewModel2.Name, Name1); BindingEngine.SetPropertyBinding(viewModel2, "Age", viewModel, "Age") .SetMode(BindMode.TwoWay); BindingEngine.ClearBinding(new TestViewModel()); viewModel.Age = 2; Assert.AreEqual(viewModel2.Age, 2); BindingEngine.ClearBinding(viewModel2); viewModel.Name = Name2; Assert.AreNotEqual(viewModel2.Name, Name2); viewModel.Age = 3; Assert.AreNotEqual(viewModel2.Age, 3); }
public void Test_WeakBindEvent_NormalProperty() { var viewModel = new TestViewModel(); var view = new TestView(); var propertyBinding = new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>(); var weakEvent = new WeakEvent(viewModel); Assert.IsFalse(weakEvent.IsAttached); }
public void Test_WeakCommandBinding_Basic() { var viewModel = new TestViewModel(); var view = new TestView(); new WeakCommandBinding(view, null, viewModel, "AddAgeCommand") .Initialize<WeakCommandBinding>() .AttachTargetEvent("TestViewEvent"); Assert.AreEqual(0, viewModel.Age); view.RaiseTestViewEvent(); Assert.AreEqual(1, viewModel.Age); }
public void Test_WeakBinding_AttachSourceEvent() { var viewModel = new TestViewModel(); var view = new TestView(); new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .AttachSourceEvent("TestViewModelEvent"); viewModel.Name = Name1; Assert.AreNotEqual(view.Text1, Name1); viewModel.RaiseTestViewModelEvent(); Assert.AreEqual(view.Text1, Name1); }
public void Test_WeakSource_ClearBinding() { var viewModel = new TestViewModel(); var view = new TestView(); var ws = new WeakTarget(view); ws.SetBinding<WeakPropertyBinding>("Text1", viewModel, "Name"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); ws.ClearBinding("Text1", viewModel, "Name"); viewModel.Name = Name2; Assert.AreNotEqual(view.Text2, Name2); }
public void Test_BindingEngine_ClearBinding_Expression() { var viewModel = new TestViewModel(); var view = new TestViewModel2(); BindingEngine.SetPropertyBinding(view, "Name", viewModel, "Name") .SetMode(BindMode.TwoWay); viewModel.Name = Name1; Assert.AreEqual(view.Name, Name1); BindingEngine.ClearBinding(view, i => i.Name, viewModel, o => o.Name); viewModel.Name = Name2; Assert.AreNotEqual(view.Name, Name2); }
public void Test_WeakCollectionBinding_CollecionHandler() { var viewModel = new TestViewModel(); var view = new TestView(); new WeakCollectionBinding(view, "CollectionNames", viewModel, "TestViewModelCollection") .Initialize<WeakCollectionBinding>() .SetTargetCollectionHandler(new TestDataCollectionHandler()); view.CollectionNames = new List<string>(); var collections = new ObservableCollection<TestViewModel2>(); viewModel.TestViewModelCollection = collections; collections.Add(new TestViewModel2 { Name = Name1 }); Assert.AreEqual(1, view.CollectionNames.Count); Assert.AreEqual(Name1, view.CollectionNames[0]); collections.RemoveAt(0); Assert.AreEqual(0, view.CollectionNames.Count); collections.Add(new TestViewModel2 { Name = Name2 }); collections.Clear(); Assert.AreEqual(0, view.CollectionNames.Count); viewModel = new TestViewModel(); view = new TestView(); new WeakCollectionBinding(viewModel, "TestViewModelCollection", view, "CollectionNames") .Initialize<WeakCollectionBinding>() .SetMode<WeakCollectionBinding>(BindMode.OneWayToSource) .SetSourceCollectionHandler(new TestDataCollectionHandler()); view.CollectionNames = new List<string>(); collections = new ObservableCollection<TestViewModel2>(); viewModel.TestViewModelCollection = collections; collections.Add(new TestViewModel2 { Name = Name1 }); Assert.AreEqual(1, view.CollectionNames.Count); Assert.AreEqual(Name1, view.CollectionNames[0]); collections.RemoveAt(0); Assert.AreEqual(0, view.CollectionNames.Count); collections.Add(new TestViewModel2 { Name = Name2 }); collections.Clear(); Assert.AreEqual(0, view.CollectionNames.Count); }
public void Test_WeakMethodBinding_SourceMethod() { var viewModel = new TestViewModel(); var button = new Button(); new WeakMethodBinding(viewModel, null, button, null) .Initialize<WeakMethodBinding>() .AttachTargetMethod("AddAge", null) .AttachTargetCanInvokeMethod("CanAddAge", null) .AttachSourceEvent("Click"); Assert.AreEqual(0, viewModel.Age); button.PerformClick(); Assert.AreEqual(1, viewModel.Age); }
public void Test_MethodInvoker_Basic() { var viewModel5 = new TestViewModel5(); var canMethodInvoker = new MethodInvoker(new BindContext(viewModel5, "TestViewModel"), "CanAddAge", null); var methodInvoker = new MethodInvoker(new BindContext(viewModel5, "TestViewModel"), "AddAge", null); bool value = canMethodInvoker.CanInvoke(); Assert.IsFalse(value); methodInvoker.Invoke(); viewModel5.TestViewModel = new TestViewModel(); value = canMethodInvoker.CanInvoke(); Assert.IsTrue(value); methodInvoker.Invoke(); Assert.AreEqual(1, viewModel5.TestViewModel.Age); var canMethodInvoker2 = new MethodInvoker(new BindContext(viewModel5, "TestViewModel"), "AddAge", null); MissingMemberException exception = null; try { canMethodInvoker2.CanInvoke(); } catch (MissingMemberException e) { exception = e; } Assert.IsNotNull(exception); var vm = new TestViewModel(); var canMethodInvoker3 = new MethodInvoker(new BindContext(viewModel5, "TestViewModel"), "CanSetAge", new[] { new BindContext(vm, "Age") }); var methodInvoker2 = new MethodInvoker(new BindContext(viewModel5, "TestViewModel"), "SetAge", new[] { new BindContext(vm, "Age") }); Assert.IsTrue(canMethodInvoker3.CanInvoke()); vm.Age = 6; Assert.AreNotEqual(6, viewModel5.TestViewModel.Age); methodInvoker2.Invoke(); Assert.AreEqual(6, viewModel5.TestViewModel.Age); }
public void Test_WeakNotify_OneWayToSource() { var viewModel = new TestViewModel(); var view = new TestView(); int changedCount = 0; new WeakNotifyBinding(view, null, viewModel, "Age") .Initialize<WeakNotifyBinding>() .AttachTargetEvent("TestViewEvent") .OfType<WeakNotifyBinding>() .SetTargetChanged<WeakNotifyBinding>((source, args) => { changedCount++; }); Assert.AreEqual(0, changedCount); view.RaiseTestViewEvent(); Assert.AreEqual(1, changedCount); }
public void Test_WeakSource_ClearAllBindings() { var viewModel = new TestViewModel(); var view = new TestView(); var ws = new WeakTarget(view); ws.SetBinding<WeakPropertyBinding>( "Text1", viewModel,"Name"); ws.SetBinding<WeakPropertyBinding>("ValueInt", viewModel, "Age"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); viewModel.Age = 2; Assert.AreEqual(view.ValueInt, 2); ws.ClearBindings(); viewModel.Name = Name2; viewModel.Age = 3; Assert.AreNotEqual(view.Text1, Name2); Assert.AreNotEqual(view.ValueInt, Name2); }
public void Test_WeakBinding_AttachTargetEvent_2() { var viewModel = new TestViewModel(); var view = new TestView(); var button = new Button(); new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.TwoWay) .AttachTargetEvent(button, null, "Click"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); view.Text1 = Name2; Assert.AreNotEqual(viewModel.Name, Name2); button.PerformClick(); Assert.AreEqual(viewModel.Name, Name2); }
public void Test_WeakBinding_AttachSourceEvent_2() { var viewModel = new TestViewModel(); var view = new TestView(); var button = new Button(); WeakBinding binding = new WeakPropertyBinding(viewModel, "Name", view, "Text1") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.OneWay) .AttachSourceEvent(button, "Click"); view.Text1 = Name1; Assert.AreNotEqual(viewModel.Name, Name1); button.PerformClick(); Assert.AreEqual(viewModel.Name, Name1); binding.Clear(); viewModel = new TestViewModel(); view = new TestView(); button = new Button(); new WeakPropertyBinding(viewModel, "Name", view, "Text1") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.OneWay) .AttachSourceEvent(button, null, "Click"); view.Text1 = Name1; Assert.AreNotEqual(viewModel.Name, Name1); button.PerformClick(); Assert.AreEqual(viewModel.Name, Name1); }
public void Test_WeakBinding_Update() { var viewModel = new TestViewModel(); var view = new TestView(); WeakBinding binding = new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.TwoWay) .AttachTargetEvent("TestViewEvent"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); view.Text1 = Name2; Assert.AreNotEqual(viewModel.Name, Name2); view.RaiseTestViewEvent(); Assert.AreEqual(viewModel.Name, Name2); binding.Update("Text2", viewModel, "Name"); viewModel.Name = Name1; Assert.AreNotEqual(view.Text1, Name1); Assert.AreEqual(view.Text2, Name1); }
public void Test_WeakBinding_MemoryLeak() { var viewModel = new TestViewModel(); var view = new TestView(); int changed = 0; WeakPropertyBinding binding = new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.OneWay) .AttachTargetEvent("TestViewEvent") .SetTargetChanged<WeakPropertyBinding>((sender, args) => { changed++; }); viewModel.Name = Name1; Assert.AreEqual(Name1, view.Text1); Assert.AreEqual(1, changed); viewModel.Name = Name2; Assert.AreEqual(Name2, view.Text1); Assert.AreEqual(2, changed); view = null; GC.Collect(); viewModel.Name = Name1; Assert.AreEqual(2, changed); }
public void Test_WeakBinding_GetBindSource() { var viewModel = new TestViewModel(); var view = new TestView(); WeakBinding binding = new WeakPropertyBinding(viewModel, "Name", view, "Text1") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.TwoWay) .AttachSourceEvent(typeof(TestView), "StaticTestViewEvent"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); view.Text1 = Name2; Assert.AreNotEqual(viewModel.Name, Name2); TestView.RaiseStaticTestViewEvent(); Assert.AreEqual(viewModel.Name, Name2); BindContext context = binding.GetBindContext(viewModel, "Name"); Assert.AreEqual(binding.BindTarget, context); BindContext source2 = binding.GetBindContext(view, "Text1"); Assert.AreEqual(binding.BindSource, source2); }
public void Test_WeakBinding_DoConventions() { var viewModel = new TestViewModel(); var viewModel2 = new TestViewModel2(); var binding = new WeakPropertyBinding(viewModel2, "Name", viewModel, "Name") .Initialize<WeakPropertyBinding>(); binding.DeActivate(); Assert.IsFalse(binding.IsActivate); binding.Activate(); viewModel.Name = Name1; binding.DeActivate(); viewModel.Name = Name2; Assert.AreNotEqual(viewModel2.Name, Name2); binding.Activate(); Assert.AreEqual(viewModel2.Name, Name2); }
public void Test_WeakBinding_DeActive() { var viewModel = new TestViewModel(); var view = new TestView(); WeakBinding binding = new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.OneWay) .AttachTargetEvent("TestViewEvent"); viewModel.Name = Name1; binding.DeActivate(); viewModel.Name = Name2; Assert.AreNotEqual(view.Text1, Name2); binding.Activate(); Assert.AreEqual(view.Text1, Name2); }
public void Test_WeakBinding_AttachTargetEvent_3() { var viewModel = new TestViewModel(); var view = new TestView(); new WeakPropertyBinding(view, "Text1", viewModel, "Name") .Initialize<WeakPropertyBinding>() .SetMode(BindMode.TwoWay) .AttachTargetEvent(typeof(TestView), "StaticTestViewEvent"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); view.Text1 = Name2; Assert.AreNotEqual(viewModel.Name, Name2); TestView.RaiseStaticTestViewEvent(); Assert.AreEqual(viewModel.Name, Name2); }
public void Test_BindingEngine_PropertyBinding_Expression() { var viewModel = new TestViewModel(); var view = new TestView(); BindingEngine.SetPropertyBinding(view, o => o.Text1, viewModel, i => i.Name) .SetMode(BindMode.TwoWay) .AttachTargetEvent("TestViewEvent"); viewModel.Name = Name1; Assert.AreEqual(view.Text1, Name1); view.Text1 = Name2; Assert.AreNotEqual(viewModel.Name, Name2); view.RaiseTestViewEvent(); Assert.AreEqual(viewModel.Name, Name2); }
public void Test_WeakMethodBinding_SourceMethod_2() { var viewModel2 = new TestViewModel2(); var viewModel = new TestViewModel(); var button = new Button(); var binding = new WeakMethodBinding(viewModel2, null, button, null) .Initialize<WeakMethodBinding>() .AttachTargetMethod(new BindContext(viewModel, null), "AddAge", null) .AttachTargetCanInvokeMethod(new BindContext(viewModel, null), "CanAddAge", null) .AttachSourceEvent("Click") .OfType<WeakMethodBinding>(); Assert.AreEqual(0, viewModel.Age); button.PerformClick(); Assert.AreEqual(1, viewModel.Age); button.PerformClick(); Assert.AreEqual(2, viewModel.Age); button.PerformClick(); Assert.AreEqual(2, viewModel.Age); binding.DetachTargetCanInvokeMethod(); button.PerformClick(); Assert.AreEqual(3, viewModel.Age); binding.DetachTargetMethod(); button.PerformClick(); Assert.AreEqual(3, viewModel.Age); }
public void Test_BindingEngine_PropertyBinding() { var viewModel = new TestViewModel(); var view = new TestView(); var binding = BindingEngine.SetPropertyBinding(view, "Text1", viewModel, "Name") .SetMode(BindMode.TwoWay) .AttachTargetEvent("TestViewEvent"); Assert.AreEqual("Name", binding.SourceProperty); Assert.AreEqual("Text1", binding.TargetProperty); viewModel.Name = Name1; Assert.AreEqual(Name1, view.Text1); view.Text1 = Name2; Assert.AreNotEqual(Name2, viewModel.Name); view.RaiseTestViewEvent(); Assert.AreEqual(Name2, viewModel.Name); }