public void TestBindToAndUnbindFrom()
        {
            Bindable <Dummy> dummy  = new Bindable <Dummy>(new Dummy());
            Bindable <Dummy> dummy2 = new Bindable <Dummy>(new Dummy());

            Assert.AreNotEqual(dummy.Value, dummy2.Value);

            dummy2.BindTo(dummy);
            Assert.AreEqual(dummy.Value, dummy2.Value);

            dummy.Value = null;
            Assert.IsNull(dummy.Value);
            Assert.IsNull(dummy2.Value);

            dummy2.UnbindFrom(dummy);
            dummy.Value = new Dummy();
            Assert.IsNotNull(dummy.Value);
            Assert.IsNull(dummy2.Value);

            Bindable <SubDummy> subDummy = new Bindable <SubDummy>(new SubDummy());

            dummy.BindToRaw(subDummy);
            Assert.AreEqual(subDummy.Value, dummy.Value);

            subDummy.Value = new SubDummy();
            Assert.AreEqual(subDummy.Value, dummy.Value);

            dummy.UnbindFromRaw(subDummy);
            subDummy.Value = null;
            Assert.IsNull(subDummy.Value);
            Assert.IsNotNull(dummy.Value);

            dummy.Value = new Dummy();
            Assert.Throws(typeof(ArgumentException), () =>
            {
                subDummy.BindToRaw(dummy);
            });
        }