Example #1
0
        public void SettersAppliedOnConditionChanged()
        {
            var setterbp = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var element  = new MockElement();
            var trigger  = new DataTrigger(typeof(VisualElement))
            {
                Binding = new Binding("foo"),
                Value   = "foobar",
                Setters =
                {
                    new Setter {
                        Property = setterbp, Value = "qux"
                    },
                }
            };

            element.SetValue(setterbp, "default");
            element.Triggers.Add(trigger);

            Assert.AreEqual("default", element.GetValue(setterbp));
            element.BindingContext = new { foo = "foobar" };
            Assert.AreEqual("qux", element.GetValue(setterbp));
            element.BindingContext = new { foo = "" };
            Assert.AreEqual("default", element.GetValue(setterbp));
        }
Example #2
0
        public void SettersNotAppliedOnAttachIfOneConditionIsFalse()
        {
            var conditionbp  = BindableProperty.Create("foo", typeof(string), typeof(BindableObject), null);
            var setterbp     = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var element      = new MockElement();
            var multiTrigger = new MultiTrigger(typeof(VisualElement))
            {
                Conditions =
                {
                    new PropertyCondition {
                        Property = conditionbp, Value = "foobar"
                    },
                    new BindingCondition  {
                        Binding = new Binding("baz"), Value = "foobaz"
                    },
                },
                Setters =
                {
                    new Setter {
                        Property = setterbp, Value = "qux"
                    },
                }
            };

            element.SetValue(setterbp, "default");
            element.SetValue(conditionbp, "foobar");
            element.BindingContext = new { baz = "foobazXX" };
            Assert.AreEqual("default", element.GetValue(setterbp));
            element.Triggers.Add(multiTrigger);
            Assert.AreEqual("default", element.GetValue(setterbp));
        }
Example #3
0
		public void SettersUnappliedOnDetach ()
		{
			var conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
			var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
			var element = new MockElement ();
			var multiTrigger = new MultiTrigger (typeof(VisualElement)) {
				Conditions = {
					new PropertyCondition { Property = conditionbp, Value = "foobar" },
					new BindingCondition { Binding = new Binding ("baz"), Value = "foobaz" },
				},
				Setters = {
					new Setter { Property = setterbp, Value = "qux" },
				}
			};

			element.SetValue (setterbp, "default");
			element.BindingContext = new {baz = "" };
			element.Triggers.Add (multiTrigger);
			Assert.AreEqual ("default", element.GetValue (setterbp)); //both conditions false

			element.SetValue (conditionbp, "foobar");
			Assert.AreEqual ("default", element.GetValue (setterbp)); //one condition false

			element.BindingContext = new {baz = "foobaz"};
			Assert.AreEqual ("qux", element.GetValue (setterbp)); //both condition true
			element.Triggers.Remove (multiTrigger);
			Assert.AreEqual ("default", element.GetValue (setterbp));
		}
Example #4
0
        public void SettersUnappliedOnDetach()
        {
            var conditionbp = BindableProperty.Create("foo", typeof(string), typeof(BindableObject), null);
            var setterbp    = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var element     = new MockElement();
            var trigger     = new Trigger(typeof(VisualElement))
            {
                Property = conditionbp,
                Value    = "foobar",
                Setters  =
                {
                    new Setter {
                        Property = setterbp, Value = "qux"
                    },
                }
            };

            element.SetValue(setterbp, "default");
            element.Triggers.Add(trigger);

            Assert.AreEqual("default", element.GetValue(setterbp));
            element.SetValue(conditionbp, "foobar");
            Assert.AreEqual("qux", element.GetValue(setterbp));
            element.Triggers.Remove(trigger);
            Assert.AreEqual("default", element.GetValue(setterbp));
        }
Example #5
0
        // https://bugzilla.xamarin.com/show_bug.cgi?id=32896
        public void SettersWithBindingsUnappliedIfConditionIsFalse()
        {
            var conditionbp = BindableProperty.Create("foo", typeof(string), typeof(BindableObject), null);
            var setterbp    = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var element     = new MockElement();
            var trigger     = new Trigger(typeof(VisualElement))
            {
                Property = conditionbp,
                Value    = "foobar",
                Setters  =
                {
                    new Setter {
                        Property = setterbp, Value = new Binding(".", source: "Qux")
                    },
                }
            };

            element.SetValue(setterbp, "default");
            element.Triggers.Add(trigger);
            Assume.That(element.GetValue(setterbp), Is.EqualTo("default"));

            //sets the condition to true
            element.SetValue(conditionbp, "foobar");
            Assume.That(element.GetValue(setterbp), Is.EqualTo("Qux"));

            //unsets the condition
            element.SetValue(conditionbp, "baz");
            Assert.That(element.GetValue(setterbp), Is.EqualTo("default"));
        }
Example #6
0
        public void TriggersAppliedOnMultipleElements()
        {
            var setterbp = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var trigger  = new DataTrigger(typeof(VisualElement))
            {
                Binding = new Binding("foo"),
                Value   = "foobar",
                Setters =
                {
                    new Setter {
                        Property = setterbp, Value = "qux"
                    },
                }
            };
            var element0 = new MockElement {
                Triggers = { trigger }
            };
            var element1 = new MockElement {
                Triggers = { trigger }
            };

            element0.BindingContext = element1.BindingContext = new { foo = "foobar" };
            Assert.AreEqual("qux", element0.GetValue(setterbp));
            Assert.AreEqual("qux", element1.GetValue(setterbp));
        }
Example #7
0
		public void SettersAppliedOnAttachIfConditionIsTrue ()
		{
			var conditionbp = BindableProperty.Create ("foo", typeof(string), typeof(BindableObject), null);
			var setterbp = BindableProperty.Create ("bar", typeof(string), typeof(BindableObject), null);
			var element = new MockElement ();
			var trigger = new Trigger (typeof(VisualElement)) {
				Property = conditionbp,
				Value = "foobar",
				Setters = {
					new Setter { Property = setterbp, Value = "qux" },
				}
			};

			element.SetValue (setterbp, "default");
			element.SetValue (conditionbp, "foobar");
			Assert.AreEqual ("default", element.GetValue (setterbp));
			element.Triggers.Add (trigger);
			Assert.AreEqual ("qux", element.GetValue (setterbp));
		}
Example #8
0
        public void SettersAppliedAndUnappliedOnConditionsChange()
        {
            var conditionbp  = BindableProperty.Create("foo", typeof(string), typeof(BindableObject), null);
            var setterbp     = BindableProperty.Create("bar", typeof(string), typeof(BindableObject), null);
            var element      = new MockElement();
            var multiTrigger = new MultiTrigger(typeof(VisualElement))
            {
                Conditions =
                {
                    new PropertyCondition {
                        Property = conditionbp, Value = "foobar"
                    },
                    new BindingCondition  {
                        Binding = new Binding("baz"), Value = "foobaz"
                    },
                },
                Setters =
                {
                    new Setter {
                        Property = setterbp, Value = "qux"
                    },
                }
            };

            element.SetValue(setterbp, "default");
            element.BindingContext = new { baz = "" };
            element.Triggers.Add(multiTrigger);
            Assert.AreEqual("default", element.GetValue(setterbp));               //both conditions false

            element.SetValue(conditionbp, "foobar");
            Assert.AreEqual("default", element.GetValue(setterbp));               //one condition false

            element.BindingContext = new { baz = "foobaz" };
            Assert.AreEqual("qux", element.GetValue(setterbp));               //both condition true

            element.BindingContext = new { baz = "" };
            Assert.AreEqual("default", element.GetValue(setterbp));               //one condition false

            element.BindingContext = new { baz = "foobaz" };
            Assert.AreEqual("qux", element.GetValue(setterbp));               //both condition true

            element.SetValue(conditionbp, "");
            Assert.AreEqual("default", element.GetValue(setterbp));               //one condition false

            element.SetValue(conditionbp, "foobar");
            Assert.AreEqual("qux", element.GetValue(setterbp));               //both condition true

            element.SetValue(conditionbp, "");
            element.BindingContext = new { baz = "foobaz" };
            Assert.AreEqual("default", element.GetValue(setterbp));               //both conditions false
        }