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_WeakPropertyBinding_PropertyGetter()
        {
            var viewModel = new TestViewModel();
            var view      = new TestView();

            WeakPropertyBinding propertyBinding = new WeakPropertyBinding(view, "Text1", viewModel, "Name")
                                                  .Initialize <WeakPropertyBinding>()
                                                  .SetMode <WeakPropertyBinding>(BindMode.OneWay)
                                                  .SetSourcePropertyGetter(data => ((TestViewModel)data.Source.Source).Name + "1");

            viewModel.Name = Name1;

            Assert.AreEqual(view.Text1, Name1 + "1");

            propertyBinding.Clear();

            propertyBinding = new WeakPropertyBinding(viewModel, "Name", view, "Text1")
                              .Initialize <WeakPropertyBinding>()
                              .SetMode <WeakPropertyBinding>(BindMode.OneWayToSource)
                              .SetTargetPropertyGetter(data => ((TestViewModel)data.Target.Source).Name + "2");

            viewModel.Name = Name1;

            Assert.AreEqual(view.Text1, Name1 + "2");
        }
        public void Test_WeakPropertyBinding_PropertySetter()
        {
            var viewModel = new TestViewModel();
            var view      = new TestView();

            WeakPropertyBinding propertyBinding = new WeakPropertyBinding(view, null, viewModel, "Name")
                                                  .Initialize <WeakPropertyBinding>()
                                                  .SetMode <WeakPropertyBinding>(BindMode.OneWay)
                                                  .SetTargetPropertySetter(
                (data, value) => { ((TestView)data.Target.Source).Text1 = value.ToStringWithoutException(); });

            viewModel.Name = Name1;

            Assert.AreEqual(view.Text1, Name1);
            propertyBinding.Clear();


            new WeakPropertyBinding(viewModel, "Name", view, null)
            .Initialize <WeakPropertyBinding>()
            .SetMode <WeakPropertyBinding>(BindMode.OneWayToSource)
            .SetSourcePropertySetter(
                (data, value) => { ((TestView)data.Source.Source).Text1 = value.ToStringWithoutException(); });

            viewModel.Name = Name2;

            Assert.AreEqual(view.Text1, Name2);
        }
Example #5
0
        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);
        }
Example #6
0
        public void Test_MemoryLeak_WeakBinding_Basic()
        {
            var viewModel  = new TestViewModel();
            var view       = new TestView();
            var reference  = new WeakReference(view);
            var reference2 = new WeakReference(viewModel);

            var binding = new WeakPropertyBinding(view, "Text1", viewModel, "Name")
                          .Initialize <WeakPropertyBinding>()
                          .SetMode(BindMode.OneWay);

            viewModel.Name = Name1;

            Assert.AreEqual(view.Text1, Name1);

            view = null;
            GC.Collect();
            Assert.IsFalse(reference.IsAlive);

            viewModel = null;
            GC.Collect();
            Assert.IsFalse(reference2.IsAlive);


            GC.KeepAlive(binding);
        }
        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_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_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_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);
        }
Example #11
0
        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_WeakBinding_DetachTargetEvent()
        {
            var viewModel = new TestViewModel();
            var view      = new TestView();

            WeakBinding properyBinding = 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);

            properyBinding.DetachTargetEvent();
            viewModel.Name = Name2;
            Assert.AreNotEqual(view.Text1, 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);
        }
Example #14
0
        public void Test_MemoryLeak_WeakPropertyBinding_Getter_Setter()
        {
            var viewModel  = new TestViewModel();
            var viewModel2 = new TestViewModel2();

            var viewModel1  = new TestViewModel();
            var viewModel21 = new TestViewModel2();

            var reference  = new WeakReference(viewModel1);
            var reference2 = new WeakReference(viewModel21);

            WeakBinding binding = new WeakPropertyBinding(viewModel2, null, viewModel, null)
                                  .Initialize <WeakPropertyBinding>()
                                  .SetMode <WeakPropertyBinding>(BindMode.TwoWay)
                                  .SetTargetPropertyGetter(arg => viewModel1.Name)
                                  .SetSourcePropertyGetter(arg => viewModel21.Name)
                                  .SetTargetPropertySetter((data, value) => viewModel1.Name  = value.ToStringWithoutException())
                                  .SetSourcePropertySetter((data, value) => viewModel21.Name = value.ToStringWithoutException())
                                  .AttachTargetEvent("TestViewModelEvent")
                                  .AttachSourceEvent("TestViewModelEvent");

            viewModel21.Name = Name1;
            viewModel.RaiseTestViewModelEvent();
            Assert.AreEqual(viewModel1.Name, Name1);

            viewModel1.Name = Name2;
            viewModel2.RaiseTestViewModelEvent();
            Assert.AreEqual(viewModel21.Name, Name2);

            viewModel1 = null;
            GC.Collect();
            Assert.IsFalse(reference.IsAlive);

            viewModel21 = null;
            GC.Collect();
            Assert.IsFalse(reference2.IsAlive);

            GC.KeepAlive(binding);
        }
        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_MemoryLeak_WeakBinding_Basic()
        {
            var viewModel = new TestViewModel();
            var view = new TestView();
            var reference = new WeakReference(view);
            var reference2 = new WeakReference(viewModel);

            var binding = new WeakPropertyBinding(view, "Text1", viewModel, "Name")
                .Initialize<WeakPropertyBinding>()
                .SetMode(BindMode.OneWay);
            viewModel.Name = Name1;

            Assert.AreEqual(view.Text1, Name1);

            view = null;
            GC.Collect();
            Assert.IsFalse(reference.IsAlive);

            viewModel = null;
            GC.Collect();
            Assert.IsFalse(reference2.IsAlive);

            GC.KeepAlive(binding);
        }
        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_DetachTargetEvent()
        {
            var viewModel = new TestViewModel();
            var view = new TestView();

            WeakBinding properyBinding = 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);

            properyBinding.DetachTargetEvent();
            viewModel.Name = Name2;
            Assert.AreNotEqual(view.Text1, 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_MemoryLeak_WeakPropertyBinding_Getter_Setter()
        {
            var viewModel = new TestViewModel();
            var viewModel2 = new TestViewModel2();

            var viewModel1 = new TestViewModel();
            var viewModel21 = new TestViewModel2();

            var reference = new WeakReference(viewModel1);
            var reference2 = new WeakReference(viewModel21);

            WeakBinding binding = new WeakPropertyBinding(viewModel2, null, viewModel, null)
                .Initialize<WeakPropertyBinding>()
                .SetMode<WeakPropertyBinding>(BindMode.TwoWay)
                .SetTargetPropertyGetter(arg => viewModel1.Name)
                .SetSourcePropertyGetter(arg => viewModel21.Name)
                .SetTargetPropertySetter((data, value) => viewModel1.Name = value.ToStringWithoutException())
                .SetSourcePropertySetter((data, value) => viewModel21.Name = value.ToStringWithoutException())
                .AttachTargetEvent("TestViewModelEvent")
                .AttachSourceEvent("TestViewModelEvent");

            viewModel21.Name = Name1;
            viewModel.RaiseTestViewModelEvent();
            Assert.AreEqual(viewModel1.Name, Name1);

            viewModel1.Name = Name2;
            viewModel2.RaiseTestViewModelEvent();
            Assert.AreEqual(viewModel21.Name, Name2);

            viewModel1 = null;
            GC.Collect();
            Assert.IsFalse(reference.IsAlive);

            viewModel21 = null;
            GC.Collect();
            Assert.IsFalse(reference2.IsAlive);

            GC.KeepAlive(binding);
        }