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_WeakCollectionBinding_TwoWay()
        {
            var viewModel = new TestViewModel();
            var viewModel3 = new TestViewModel3();

            new WeakCollectionBinding(viewModel3, "TestViewModelCollection", viewModel, "TestViewModelCollection")
                .Initialize<WeakCollectionBinding>()
                .SetMode(BindMode.TwoWay);

            viewModel3.TestViewModelCollection = new ObservableCollection<TestViewModel2>();
            viewModel.TestViewModelCollection = new ObservableCollection<TestViewModel2>();

            var viewModel2 = new TestViewModel2();
            viewModel3.TestViewModelCollection.Add(viewModel2);

            Assert.AreEqual(1, viewModel.TestViewModelCollection.Count);
            Assert.AreEqual(viewModel2, viewModel.TestViewModelCollection[0]);

            viewModel2 = new TestViewModel2();
            viewModel.TestViewModelCollection.Add(viewModel2);

            Assert.AreEqual(2, viewModel3.TestViewModelCollection.Count);
            Assert.AreEqual(viewModel2, viewModel3.TestViewModelCollection[1]);

            viewModel.TestViewModelCollection.Clear();
            Assert.AreEqual(0, viewModel3.TestViewModelCollection.Count);

            viewModel2 = new TestViewModel2();
            viewModel3.TestViewModelCollection.Add(viewModel2);
            Assert.AreEqual(1, viewModel.TestViewModelCollection.Count);

            viewModel3.TestViewModelCollection.RemoveAt(0);
            Assert.AreEqual(0, viewModel.TestViewModelCollection.Count);
        }
        public void Test_WeakCollectionBinding_TargetGenerator()
        {
            var viewModel = new TestViewModel();
            var viewmodel3 = new TestViewModel3();

            new WeakCollectionBinding(viewmodel3, "StringValues", viewModel, "TestViewModelCollection")
                .Initialize<WeakCollectionBinding>()
                .SetMode<WeakCollectionBinding>(BindMode.TwoWay)
                .SetSourceDataParameter("_END")
                .SetSourceDataGenerator((o, o1) => new TestViewModel2 { Name = o.ToString() + o1 });

            var collections = new ObservableCollection<TestViewModel2>();
            viewModel.TestViewModelCollection = collections;

            viewmodel3.StringValues.Add(Name1);
            Assert.AreEqual(1, viewModel.TestViewModelCollection.Count);
            Assert.AreEqual(Name1 + "_END", viewModel.TestViewModelCollection[0].Name);
        }
        public void Test_BindSource_IndexPropertyInt2()
        {
            var viewModel = new TestViewModel();
            var bindSource = new BindContext(viewModel, "TestViewModel2.TestViewModel3.TestViewModels[1].Name");

            var viewModel2 = new TestViewModel2();
            viewModel.TestViewModel2 = viewModel2;

            var viewModel3 = new TestViewModel3();
            viewModel2.TestViewModel3 = viewModel3;

            Assert.AreEqual(null, bindSource.Value);
            Assert.AreEqual(null, bindSource.Source);

            var testViewModels = new ObservableCollection<TestViewModel4>();
            viewModel3.TestViewModels = testViewModels;

            Assert.AreEqual(null, bindSource.Source);
            Assert.AreEqual(null, bindSource.Value);

            var t4 = new TestViewModel4();
            var t41 = new TestViewModel4();
            testViewModels.Add(t4);
            testViewModels.Add(t41);

            Assert.AreEqual(t41, bindSource.Source);
            Assert.AreEqual(null, bindSource.Value);

            t41.Name = Name;
            Assert.AreEqual(Name, bindSource.Value);

            testViewModels.RemoveAt(1);

            Assert.AreEqual(null, bindSource.Source);
            Assert.AreEqual(null, bindSource.Value);
        }
        public void Test_BindSource_RecurisonProperty2()
        {
            var viewModel = new TestViewModel();
            var bindSource = new BindContext(viewModel, "TestViewModel2.TestViewModel3.Name");

            Assert.AreEqual(null, bindSource.Source);
            Assert.AreEqual(null, bindSource.Value);
            Assert.AreEqual(null, bindSource.PropertyType);

            var viewModel2 = new TestViewModel2();
            viewModel.TestViewModel2 = viewModel2;

            Assert.AreEqual(null, bindSource.Source);
            Assert.AreEqual(null, bindSource.Value);
            Assert.AreEqual(null, bindSource.PropertyType);

            var viewModel3 = new TestViewModel3();
            viewModel2.TestViewModel3 = viewModel3;

            Assert.AreEqual(viewModel3, bindSource.Source);
            Assert.AreEqual(typeof(string), bindSource.PropertyType);

            viewModel3.Name = Name;
            Assert.AreEqual(Name, bindSource.Value);
        }