public static void TestSetPropertyValueChanged()
        {
            bool          changed = false;
            string        value   = null;
            TestViewModel tvm     = new TestViewModel();

            tvm.BindPropertyChanged <string>("StringProperty", (v) => { value = v; changed = true; });

            Assert.That(tvm.StringProperty, Is.Null);

            tvm.StringProperty = "A string value";
            Assert.That(tvm.StringProperty, Is.EqualTo("A string value"));

            Assert.That(changed, Is.True);
            Assert.That(value, Is.EqualTo("A string value"));

            value              = null;
            changed            = false;
            tvm.StringProperty = "A string value";
            Assert.That(tvm.StringProperty, Is.EqualTo("A string value"));

            Assert.That(changed, Is.False);
            Assert.That(value, Is.Null);

            tvm.StringProperty = "Another string value";
            Assert.That(tvm.StringProperty, Is.EqualTo("Another string value"));
            Assert.That(changed, Is.True);
            Assert.That(value, Is.EqualTo("Another string value"));
        }
        public static void TestValidationError()
        {
            TestViewModel           tvm       = new TestViewModel();
            TestValidationErrorCode errorCode = TestValidationErrorCode.Unknown;

            tvm.BindPropertyChanged <int>("ValidationError", (n) => { errorCode = (TestValidationErrorCode)n; });

            tvm.StringProperty = "Error";
            Assert.That(tvm.Error.Length, Is.GreaterThan(0));
            Assert.That(errorCode, Is.EqualTo(TestValidationErrorCode.BadString));
            Assert.That(tvm.ValidationError, Is.EqualTo((int)TestValidationErrorCode.BadString));

            tvm.IntProperty = -100;
            Assert.That(tvm.Error.Length, Is.GreaterThan(0));
            Assert.That(errorCode, Is.EqualTo(TestValidationErrorCode.BadInt));
            Assert.That(tvm.ValidationError, Is.EqualTo((int)TestValidationErrorCode.BadInt));

            tvm.StringProperty = "";
            tvm.IntProperty    = 100;
            Assert.That(tvm.Error.Length, Is.EqualTo(0));
        }