public void ClearDataContextWhenThereIsNoInheritedValueFromParent()
 {
     using(var form = new Form()) {
         var button1 = new Button();
         button1.SetDataContext("button3");
         form.Controls.Add(button1);
         button1.ClearDataContext();
         Assert.That(button1.GetDataContext(), Is.Null);
         Assert.That(button1.HasLocalDataContext(), Is.False);
         Assert.That(form.HasLocalDataContext(), Is.False);
     }
 }
        public void InheritDataContextFromParent()
        {
            using(var form = new Form()) {
                var button1 = new Button();
                var button2 = new Button();
                var button3 = new Button();
                button3.SetDataContext("button3");
                form.Controls.Add(button1);
                form.SetDataContext("test");
                form.Controls.Add(button2);
                form.Controls.Add(button3);
                Assert.That(button1.GetDataContext(), Is.EqualTo("test"));
                Assert.That(button2.GetDataContext(), Is.EqualTo("test"));
                Assert.That(button3.GetDataContext(), Is.EqualTo("button3"));
                Assert.That(button1.HasLocalDataContext(), Is.False);
                Assert.That(button2.HasLocalDataContext(), Is.False);
                Assert.That(button3.HasLocalDataContext(), Is.True);

                button1.SetDataContext("button1");
                Assert.That(button1.GetDataContext(), Is.EqualTo("button1"));
                button2.SetDataContext(null);
                Assert.That(button2.GetDataContext(), Is.Null);
                Assert.That(button1.HasLocalDataContext(), Is.True);
                Assert.That(button2.HasLocalDataContext(), Is.True);

                button3.ClearDataContext();
                Assert.That(button3.GetDataContext(), Is.EqualTo("test"));
                Assert.That(button3.HasLocalDataContext(), Is.False);
               }
        }
        public void SetAndGetDataContextForControl()
        {
            using(var button1 = new Button()) {
                Assert.That(button1.GetDataContext(), Is.Null);
                Assert.That(button1.HasLocalDataContext(), Is.False);
                button1.SetDataContext("test");
                Assert.That(button1.GetDataContext(), Is.EqualTo("test"));
                Assert.That(button1.HasLocalDataContext(), Is.True);

                button1.ClearDataContext();
                Assert.That(button1.GetDataContext(), Is.Null);
                Assert.That(button1.HasLocalDataContext(), Is.False);
            }

            using(var button2 = new Button()) {
                Assert.That(button2.GetDataContext(), Is.Null);
                button2.SetDataContext(13);
                Assert.That(button2.GetDataContext(), Is.EqualTo(13));
            }

            using(var button3 = new Button()) {
                button3.ClearDataContext();
                Assert.That(button3.GetDataContext(), Is.Null);
                Assert.That(button3.HasLocalDataContext(), Is.False);
            }
        }
        public void SetSimpleBindingBeforeSetDataContext()
        {
            using(var button = new Button()) {
                button.SetBinding("Text", new Binding());
                Assert.That(button.HasLocalDataContext(), Is.False);

                button.SetDataContext("test");
                Assert.That(button.Text, Is.EqualTo("test"));
                Assert.That(button.HasLocalDataContext(), Is.True);

                button.SetDataContext("test2");
                Assert.That(button.Text, Is.EqualTo("test2"));

                button.ClearDataContext();
                Assert.That(button.Text, Is.EqualTo(string.Empty));

                button.SetDataContext("test3");
                Assert.That(button.Text, Is.EqualTo("test3"));

                button.ClearBinding("Text");
                button.ClearBinding("Tag");
                Assert.That(button.Text, Is.EqualTo(string.Empty));
                Assert.That(button.Tag, Is.Null);
                button.SetDataContext("test4");
                Assert.That(button.Text, Is.EqualTo(string.Empty));
            }
        }
        public void SetSimpleBindingAfterSetDataContext()
        {
            using(var button = new Button()) {
                button.SetDataContext("test");
                button.SetBinding("Text", new Binding());
                Assert.That(button.Text, Is.EqualTo("test"));

                button.SetDataContext("test2");
                Assert.That(button.Text, Is.EqualTo("test2"));

                int textChangedCount = 0;
                button.TextChanged += (sender, e) => {
                    textChangedCount++;
                };
                button.SetDataContext("test2");
                Assert.That(textChangedCount, Is.EqualTo(0));

                button.ClearDataContext();
                Assert.That(button.Text, Is.EqualTo(string.Empty));
                button.SetDataContext("test3");
                Assert.That(button.Text, Is.EqualTo("test3"));
            }
        }
        public void InheritedDataContextBinding_BindAfterAddToTree()
        {
            using(var form = new Form()) {
                var button1 = new Button();
                var button2 = new Button();

                form.Controls.Add(button1);
                form.SetDataContext("test");
                form.Controls.Add(button2);

                button1.SetBinding("Text", new Binding());
                Assert.That(button1.Text, Is.EqualTo("test"));
                Assert.That(button1.HasLocalDataContext(), Is.False);

                button2.SetBinding("Text", new Binding());
                Assert.That(button2.Text, Is.EqualTo("test"));
                Assert.That(button2.HasLocalDataContext(), Is.False);

                form.SetDataContext("test2");
                Assert.That(button1.Text, Is.EqualTo("test2"));
                Assert.That(button1.HasLocalDataContext(), Is.False);
                Assert.That(button2.Text, Is.EqualTo("test2"));
                Assert.That(button2.HasLocalDataContext(), Is.False);

                button1.SetDataContext("button1");
                Assert.That(button1.Text, Is.EqualTo("button1"));
                Assert.That(button1.HasLocalDataContext(), Is.True);
                button2.SetDataContext(null);
                Assert.That(button2.Text, Is.EqualTo(string.Empty));
                Assert.That(button2.HasLocalDataContext(), Is.True);

                button1.ClearDataContext();
                Assert.That(button1.Text, Is.EqualTo("test2"));
                Assert.That(button1.HasLocalDataContext(), Is.False);
                button2.ClearDataContext();
                Assert.That(button2.Text, Is.EqualTo("test2"));
                Assert.That(button2.HasLocalDataContext(), Is.False);

                form.ClearDataContext();
                Assert.That(button1.Text, Is.EqualTo(string.Empty));
                Assert.That(button1.HasLocalDataContext(), Is.False);
                Assert.That(button2.Text, Is.EqualTo(string.Empty));
                Assert.That(button2.HasLocalDataContext(), Is.False);

                button1.SetDataContext("button1");
                Assert.That(button1.Text, Is.EqualTo("button1"));
                Assert.That(button1.HasLocalDataContext(), Is.True);

                form.SetDataContext("test");
                Assert.That(button1.Text, Is.EqualTo("button1"));
                Assert.That(button1.HasLocalDataContext(), Is.True);
                Assert.That(button2.Text, Is.EqualTo("test"));
                Assert.That(button2.HasLocalDataContext(), Is.False);

                form.Controls.Clear();
                Assert.That(button1.Text, Is.EqualTo("button1"));
                Assert.That(button2.Text, Is.EqualTo(string.Empty));
            }
        }
 public void CollectBindingSourceOnlyAfterClearBinding()
 {
     using(var button = new Button()) {
         WeakReference reference = DoBindButtonAndGetViewModelReference(button);
         TestUtils.GarbageCollect();
         Assert.That(reference.IsAlive, Is.True);
         Assert.That(button.Text, Is.EqualTo("test"));
         button.ClearDataContext();
         TestUtils.GarbageCollect();
         Assert.That(reference.IsAlive, Is.False);
         Assert.That(button.Text, Is.EqualTo(string.Empty));
     }
 }