コード例 #1
0
ファイル: SetCommandTest.cs プロジェクト: dsfranzi/MVVMLight
        public void SetCommand_OnBarButtonWithBinding_ParameterShouldUpdate()
        {
            var value = DateTime.Now.Ticks.ToString();

            var vmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = value
                }
            };

            var vmTarget = new TestViewModel();

            var control = new UIBarButtonItemEx();

            _binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Model.MyProperty);

            control.SetCommand(
                "Clicked",
                vmTarget.SetPropertyCommand,
                _binding);

            Assert.IsNull(vmTarget.TargetProperty);
            control.PerformEvent();
            Assert.AreEqual(value, vmTarget.TargetProperty);

            value += "Test";
            vmSource.Model.MyProperty = value;
            control.PerformEvent();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #2
0
ファイル: BindingTest.cs プロジェクト: dsfranzi/MVVMLight
        public void Binding_ConverterWithFallbackValue_ErrorInConverterShouldUseFallbackValue()
        {
            var vmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = "Initial value"
                }
            };

            var vmTarget = new TestViewModel();

            const string fallbackValue = "Fallback value";
            const string targetNullValue = "Target null value";

            _binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Model.MyProperty,
                vmTarget,
                () => vmTarget.TargetProperty,
                BindingMode.Default,
                fallbackValue,
                targetNullValue)
                .ConvertSourceToTarget(
                    value =>
                    {
                        throw new InvalidCastException("Only for test");
                    });

            Assert.AreEqual(fallbackValue, vmTarget.TargetProperty);

            vmSource.Model.MyProperty = "New value";

            Assert.AreEqual(fallbackValue, vmTarget.TargetProperty);
        }
コード例 #3
0
ファイル: BindingTest.cs プロジェクト: dsfranzi/MVVMLight
        public void Binding_MultipleLevelsOfNull_ShouldUseFallbackValueThenTargetNullValue()
        {
            var vmSource = new TestViewModel();
            var vmTarget = new TestViewModel();

            const string fallbackValue = "Fallback value";
            const string targetNullValue = "Target null value";

            _binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Nested.Model.MyProperty,
                vmTarget,
                () => vmTarget.TargetProperty,
                BindingMode.Default,
                fallbackValue,
                targetNullValue);

            Assert.AreEqual(fallbackValue, vmTarget.TargetProperty);
            vmSource.Nested = new TestViewModel();
            Assert.AreEqual(fallbackValue, vmTarget.TargetProperty);
            vmSource.Nested.Model = new TestModel();
            Assert.AreEqual(targetNullValue, vmTarget.TargetProperty);
            vmSource.Nested.Model.MyProperty = DateTime.Now.Ticks.ToString();
            Assert.AreEqual(vmSource.Nested.Model.MyProperty, vmTarget.TargetProperty);
        }
コード例 #4
0
ファイル: ConverterTest.cs プロジェクト: dsfranzi/MVVMLight
        public void BindingConverter_ConvertDateTimeTwoWayToText_NoError()
        {
            var now = DateTime.Now;

            Vm = new TestViewModel
            {
                Date = now
            };

#if ANDROID
            Text = new EditText(Application.Context);
#elif __IOS__
            Text = new UITextViewEx();
#endif

            this.SetBinding(
                () => Vm.Date,
                () => Text.Text,
                BindingMode.TwoWay)
                .ConvertSourceToTarget(d => d.Date.ToShortDateString())
                .ConvertTargetToSource(d => DateTime.ParseExact(d, "dd/MM/yyyy", CultureInfo.InvariantCulture));

            Assert.AreEqual(now, Vm.Date);
            Assert.AreEqual(now.ToShortDateString(), Text.Text);
            Vm.Date += TimeSpan.FromDays(3);
            Assert.AreEqual((now + TimeSpan.FromDays(3)).ToShortDateString(), Text.Text);

            var newDateString = "13/04/1971";
            var newDate = new DateTime(1971, 4, 13);
            Text.Text = newDateString;

            Assert.AreEqual(newDateString, Text.Text);
            Assert.AreEqual(newDate, Vm.Date);
        }
コード例 #5
0
ファイル: ConverterTest.cs プロジェクト: dsfranzi/MVVMLight
        public void BindingConverter_ConvertDateTimeToText_NoError()
        {
            var now = DateTime.Now;

            Vm = new TestViewModel
            {
                Date = now
            };

#if ANDROID
            Text = new EditText(Application.Context);
#elif __IOS__
            Text = new UITextViewEx();
#endif

            this.SetBinding(
                () => Vm.Date,
                () => Text.Text)
                .ConvertSourceToTarget(d => d.Date.ToShortDateString());

            Assert.AreEqual(now, Vm.Date);
            Assert.AreEqual(now.ToShortDateString(), Text.Text);

            Vm.Date += TimeSpan.FromDays(3);

            Assert.AreEqual((now + TimeSpan.FromDays(3)).ToShortDateString(), Text.Text);
        }
コード例 #6
0
ファイル: ReuseIdTest.cs プロジェクト: dsfranzi/MVVMLight
        public void ObservableTableViewController_WithListAndDefaultReuseId()
        {
            Vm = GetViewModel();

            var table = Vm.ItemsList.GetController(CreateCell, BindCell);
            table.TableView = new UITableView();
            Assert.AreEqual(null, table.ReuseId);
        }
コード例 #7
0
ファイル: ReuseIdTest.cs プロジェクト: dsfranzi/MVVMLight
        public void ObservableTableViewController_WithListAndSetReuseId()
        {
            Vm = GetViewModel();

            const string reuseId = "1234";

            var table = Vm.ItemsList.GetController(CreateCell, BindCell, reuseId);
            table.TableView = new UITableView();
            Assert.AreEqual(reuseId, table.ReuseId);
        }
コード例 #8
0
ファイル: SetCommandTest.cs プロジェクト: dsfranzi/MVVMLight
        public void SetCommand_OnBarButtonNoValueNoEventName_ClickEventShouldBeUsed()
        {
            var value = DateTime.Now.Ticks.ToString();
            var vmTarget = new TestViewModel();
            vmTarget.Configure(value);

            var control = new UIBarButtonItemEx();

            control.SetCommand(vmTarget.SetPropertyWithoutValueCommand);

            Assert.IsNull(vmTarget.TargetProperty);
            control.PerformEvent();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #9
0
        public void SetCommand_OnButtonNoValueNoEventName_ClickEventShouldBeUsed()
        {
            var value = DateTime.Now.Ticks.ToString();
            var vmTarget = new TestViewModel();
            vmTarget.Configure(value);

            var button = new Button(Application.Context);

            button.SetCommand(vmTarget.SetPropertyWithoutValueCommand);

            Assert.IsNull(vmTarget.TargetProperty);
            button.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #10
0
        public void BindingSource_NewBindingWithPrivateProperty_NoError()
        {
            // For comparison only

            var vmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = "Initial value"
                }
            };

            var vmTarget = new TestViewModel();

            _binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Model.MyProperty,
                vmTarget,
                () => vmTarget.TargetProperty);

            Assert.AreEqual(vmSource.Model.MyProperty, vmTarget.TargetProperty);
            var newValue1 = DateTime.Now.Ticks.ToString();
            vmSource.Model.MyProperty = newValue1;
            Assert.AreEqual(vmSource.Model.MyProperty, vmTarget.TargetProperty);

            // Actual test

            VmSourcePrivate = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = "Initial value"
                }
            };

            VmTarget = new TestViewModel();

            _binding = new Binding<string, string>(
                VmSourcePrivate,
                () => VmSourcePrivate.Model.MyProperty,
                VmTarget,
                () => VmTarget.TargetProperty);

            Assert.AreEqual(VmSourcePrivate.Model.MyProperty, VmTarget.TargetProperty);
            var newValue2 = DateTime.Now.Ticks.ToString();
            VmSourcePrivate.Model.MyProperty = newValue2;
            Assert.AreEqual(VmSourcePrivate.Model.MyProperty, VmTarget.TargetProperty);
        }
コード例 #11
0
        public void SetCommand_OnButtonExWithSimpleValue_NoError()
        {
            var value = DateTime.Now.Ticks.ToString();
            var vmTarget = new TestViewModel();

            var button = new ButtonEx(Application.Context);

            button.SetCommand(
                "Click",
                vmTarget.SetPropertyCommand,
                value);

            Assert.IsNull(vmTarget.TargetProperty);
            button.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #12
0
        public void Binding_OneWayFromCheckBoxToViewModelWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UISwitchEx();

            var binding = new Binding<bool, string>(
                control1,
                () => control1.On,
                vm,
                () => vm.Model.MyProperty);

            Assert.AreEqual("False", vm.Model.MyProperty);
            Assert.IsFalse(control1.On);
            control1.On = true;
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.On);
        }
コード例 #13
0
        public void Binding_OneWayFromCheckBoxToViewModelWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new CheckBox(Application.Context);

            var binding = new Binding<bool, string>(
                control1,
                () => control1.Checked,
                vm,
                () => vm.Model.MyProperty);

            Assert.AreEqual("False", vm.Model.MyProperty);
            Assert.IsFalse(control1.Checked);
            control1.Checked = true;
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.Checked);
        }
コード例 #14
0
        public void Binding_OneWayFromCheckBoxToViewModelWithObserveEvent_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new CheckBox(Application.Context);

            _binding = new Binding<bool, string>(
                control1,
                () => control1.Checked,
                vm,
                () => vm.Model.MyProperty)
                .ObserveSourceEvent<CompoundButton.CheckedChangeEventArgs>("CheckedChange");

            Assert.AreEqual("False", vm.Model.MyProperty);
            Assert.IsFalse(control1.Checked);
            control1.Checked = true;
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.Checked);
        }
コード例 #15
0
        public void Binding_OneWayFromCheckBoxToViewModelWithObserveEvent_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new CheckBox(Application.Context);

            var binding = new Binding<bool, string>(
                control1,
                () => control1.Checked,
                vm,
                () => vm.Model.MyProperty)
                .ObserveSourceEvent(); // LostFocus doesn't work programatically with CheckBoxes

            Assert.AreEqual("False", vm.Model.MyProperty);
            Assert.IsFalse(control1.Checked);
            control1.Checked = true;
            Assert.IsTrue(control1.Checked);
            Assert.AreEqual("True", vm.Model.MyProperty);
        }
コード例 #16
0
        public void BindingTarget_NewBindingWithPrivateProperty_NoError()
        {
            VmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = "Initial value"
                }
            };

            VmTargetPrivate = new TestViewModel();

            _binding = new Binding<string, string>(
                VmSource,
                () => VmSource.Model.MyProperty,
                VmTargetPrivate,
                () => VmTargetPrivate.TargetProperty);

            Assert.AreEqual(VmSource.Model.MyProperty, VmTargetPrivate.TargetProperty);
            var newValue = DateTime.Now.Ticks.ToString();
            VmSource.Model.MyProperty = newValue;
            Assert.AreEqual(VmSource.Model.MyProperty, VmTargetPrivate.TargetProperty);
        }
コード例 #17
0
        public void Binding_OneWayFromViewModelToCheckBox_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UISwitchEx();

            _binding = new Binding<string, bool>(
                vm,
                () => vm.Model.MyProperty,
                control1,
                () => control1.On);

            Assert.AreEqual(null, vm.Model.MyProperty);
            Assert.IsFalse(control1.On);
            vm.Model.MyProperty = "True";
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.On);
        }
コード例 #18
0
        public void Binding_OneWayFromEditTextToViewModelWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UITextViewEx();

            _binding = new Binding<string, string>(
                control1,
                () => control1.Text,
                vm,
                () => vm.Model.MyProperty)
                .ObserveSourceEvent("Changed");

            Assert.AreEqual(string.Empty, control1.Text);
            Assert.AreEqual(control1.Text, vm.Model.MyProperty);
            var value = DateTime.Now.Ticks.ToString();
            control1.Text = value;
            Assert.AreEqual(value, control1.Text);
            Assert.AreEqual(control1.Text, vm.Model.MyProperty);
        }
コード例 #19
0
        public void Binding_TwoWayFromEditTextToViewModelWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UITextViewEx();

            var binding = new Binding<string, string>(
                control1,
                () => control1.Text,
                vm,
                () => vm.Model.MyProperty,
                BindingMode.TwoWay)
                .UpdateSourceTrigger(UpdateTriggerMode.PropertyChanged);

            Assert.AreEqual(string.Empty, control1.Text);
            Assert.AreEqual(control1.Text, vm.Model.MyProperty);
            var value = DateTime.Now.Ticks.ToString();
            control1.Text = value;
            Assert.AreEqual(value, control1.Text);
            Assert.AreEqual(control1.Text, vm.Model.MyProperty);

            value += "Suffix";
            vm.Model.MyProperty = value;
            Assert.AreEqual(value, vm.Model.MyProperty);
            Assert.AreEqual(vm.Model.MyProperty, control1.Text);
        }
コード例 #20
0
        public void SetCommand_OnButtonWithBinding_ParameterShouldUpdate()
        {
            var value = DateTime.Now.Ticks.ToString();

            var vmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = value
                }
            };

            var vmTarget = new TestViewModel();

            var button = new Button(Application.Context);

            var binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Model.MyProperty);

            button.SetCommand(
                "Click",
                vmTarget.SetPropertyCommand,
                binding);

            Assert.IsNull(vmTarget.TargetProperty);
            button.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);

            value += "Test";
            vmSource.Model.MyProperty = value;
            button.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #21
0
        public void Binding_TwoWayFromViewModelToCheckBoxWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UISwitchEx();

            _binding = new Binding<string, bool>(
                vm,
                () => vm.Model.MyProperty,
                control1,
                () => control1.On,
                BindingMode.TwoWay)
                .ObserveTargetEvent("ValueChanged");

            Assert.AreEqual(null, vm.Model.MyProperty);
            Assert.IsFalse(control1.On);
            vm.Model.MyProperty = "True";
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.On);

            control1.On = false;
            Assert.IsFalse(control1.On);
            Assert.AreEqual("False", vm.Model.MyProperty);
        }
コード例 #22
0
        public void SetCommand_OnCheckBoxWithSimpleValueNoEventName_ClickEventShouldBeUsed()
        {
            var value = DateTime.Now.Ticks.ToString();
            var vmTarget = new TestViewModel();

            var checkBox = new CheckBox(Application.Context);

            checkBox.SetCommand<string, CompoundButton.CheckedChangeEventArgs>(
                vmTarget.SetPropertyCommand,
                value);

            Assert.IsNull(vmTarget.TargetProperty);
            checkBox.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #23
0
        public void SetCommand_OnCheckBoxWithBindingNoEventName_ParameterShouldUpdate()
        {
            var value = DateTime.Now.Ticks.ToString();

            var vmSource = new TestViewModel
            {
                Model = new TestModel
                {
                    MyProperty = value
                }
            };

            var vmTarget = new TestViewModel();

            var checkBox = new CheckBox(Application.Context);

            var binding = new Binding<string, string>(
                vmSource,
                () => vmSource.Model.MyProperty);

            checkBox.SetCommand<string, CompoundButton.CheckedChangeEventArgs>(
                vmTarget.SetPropertyCommand,
                binding);

            Assert.IsNull(vmTarget.TargetProperty);
            checkBox.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);

            value += "Test";
            vmSource.Model.MyProperty = value;
            checkBox.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #24
0
        public void SetCommand_OnCheckBoxNoValue_NoError()
        {
            var value = DateTime.Now.Ticks.ToString();
            var vmTarget = new TestViewModel();
            vmTarget.Configure(value);

            var checkBox = new CheckBox(Application.Context);

            checkBox.SetCommand<CompoundButton.CheckedChangeEventArgs>(
                "CheckedChange",
                vmTarget.SetPropertyWithoutValueCommand);

            Assert.IsNull(vmTarget.TargetProperty);
            checkBox.PerformClick();
            Assert.AreEqual(value, vmTarget.TargetProperty);
        }
コード例 #25
0
        public void Binding_TwoWayFromViewModelToEditTextWithObserveEvent_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new EditText(Application.Context);

            var binding = new Binding<string, string>(
                vm,
                () => vm.Model.MyProperty,
                control1,
                () => control1.Text,
                BindingMode.TwoWay)
                .ObserveTargetEvent(UpdateTriggerMode.LostFocus);

            Assert.AreEqual(null, vm.Model.MyProperty);
            Assert.AreEqual(string.Empty, control1.Text);
            var value = DateTime.Now.Ticks.ToString();
            vm.Model.MyProperty = value;
            Assert.AreEqual(value, vm.Model.MyProperty);
            Assert.AreEqual(vm.Model.MyProperty, control1.Text);

            var newValue = value + "Suffix";
            control1.RequestFocus();
            control1.Text = newValue;
            Assert.AreEqual(newValue, control1.Text);
            Assert.AreEqual(value, vm.Model.MyProperty);
            control1.ClearFocus();
            Assert.AreEqual(newValue, vm.Model.MyProperty);
        }
コード例 #26
0
        public void Binding_OneWayFromViewModelToEditText_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UITextViewEx();

            _binding = new Binding<string, string>(
                vm,
                () => vm.Model.MyProperty,
                control1,
                () => control1.Text);

            Assert.AreEqual(null, vm.Model.MyProperty);
            Assert.AreEqual(string.Empty, control1.Text);
            var value = DateTime.Now.Ticks.ToString();
            vm.Model.MyProperty = value;
            Assert.AreEqual(value, vm.Model.MyProperty);
            Assert.AreEqual(vm.Model.MyProperty, control1.Text);
        }
コード例 #27
0
        public void Binding_TwoWayFromCheckBoxToViewModelWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UISwitchEx();

            _binding = new Binding<bool, string>(
                control1,
                () => control1.On,
                vm,
                () => vm.Model.MyProperty,
                BindingMode.TwoWay)
                .ObserveSourceEvent("ValueChanged");

            Assert.AreEqual("False", vm.Model.MyProperty);
            Assert.IsFalse(control1.On);
            control1.On = true;
            Assert.AreEqual("True", vm.Model.MyProperty);
            Assert.IsTrue(control1.On);

            var value = "False";
            vm.Model.MyProperty = value;
            Assert.AreEqual(value, vm.Model.MyProperty);
            Assert.IsFalse(control1.On);
        }
コード例 #28
0
        public void SetCommand_WithICommandOnButtonNoValueNoEventName_ClickEventShouldBeUsed()
        {
            var vmTarget = new TestViewModel();
            var button = new Button(Application.Context);

            button.SetCommand(vmTarget.TestCommandImpl);

            var castedCommand = (CommandImpl)vmTarget.TestCommandImpl;

            Assert.IsNull(castedCommand.Parameter);
            button.PerformClick();
            Assert.AreEqual(TestViewModel.ValueForCommand, castedCommand.Parameter);
        }
コード例 #29
0
        public void Binding_TwoWayFromViewModelToEditTextWithUpdateTrigger_BindingGetsUpdated()
        {
            var vm = new TestViewModel
            {
                Model = new TestModel()
            };

            var control1 = new UITextViewEx();

            _binding = new Binding<string, string>(
                vm,
                () => vm.Model.MyProperty,
                control1,
                () => control1.Text,
                BindingMode.TwoWay)
                .ObserveTargetEvent("Changed");

            Assert.AreEqual(null, vm.Model.MyProperty);
            Assert.AreEqual(string.Empty, control1.Text);
            var value = DateTime.Now.Ticks.ToString();
            vm.Model.MyProperty = value;
            Assert.AreEqual(value, vm.Model.MyProperty);
            Assert.AreEqual(vm.Model.MyProperty, control1.Text);

            value += "Suffix";
            control1.Text = value;
            Assert.AreEqual(value, control1.Text);
            Assert.AreEqual(control1.Text, vm.Model.MyProperty);
        }
コード例 #30
0
        public void SetCommand_WithICommandOnCheckBoxNoValueNoEventName_ClickEventShouldBeUsed()
        {
            var vmTarget = new TestViewModel();
            var checkBox = new CheckBox(Application.Context);

            checkBox.SetCommand<CompoundButton.CheckedChangeEventArgs>(vmTarget.TestCommandImpl);

            var castedCommand = (CommandImpl)vmTarget.TestCommandImpl;

            Assert.IsNull(castedCommand.Parameter);
            checkBox.PerformClick();
            Assert.AreEqual(TestViewModel.ValueForCommand, castedCommand.Parameter);
        }