示例#1
0
        private void nativeWritableProperty()
        {
            var nativePropertyObject = new NativePropertyClass {
                nativeProperty = 8
            };
            var kokoProperty = new NativeWritableProperty <int>(nativePropertyObject, nameof(NativePropertyClass.nativeProperty));

            Console.WriteLine(kokoProperty.Value);                  // 8
            kokoProperty.Value = 9;
            Console.WriteLine(nativePropertyObject.nativeProperty); // 9
        }
        public void NonNotifyingPropertyInitialValue()
        {
            int nativeEvents = 0, kokoEvents = 0;
            var myNativeProperty = new MyWritableNonNotifyingNativePropertyClass();

            myNativeProperty.GreetingChanged += delegate { nativeEvents++; };

            myNativeProperty.Greeting = "hello";
            nativeEvents.Should().Be(1);

            var kokoProperty = new NativeWritableProperty <string>(myNativeProperty, nameof(myNativeProperty.Greeting), nameof(myNativeProperty.GreetingChanged));

            kokoProperty.PropertyChanged += delegate { kokoEvents++; };
            kokoProperty.Value.Should().Be("hello");
            kokoEvents.Should().Be(0, "not changed while koko property existed yet");
        }
        public void NonNotifyingPropertyValueSettable()
        {
            int nativeEvents = 0, kokoEvents = 0;

            var myNativeProperty = new MyWritableNonNotifyingNativePropertyClass();

            myNativeProperty.Greeting         = "hello";
            myNativeProperty.GreetingChanged += delegate { nativeEvents++; };

            var kokoProperty = new NativeWritableProperty <string>(myNativeProperty, nameof(myNativeProperty.Greeting), nameof(myNativeProperty.GreetingChanged));

            kokoProperty.PropertyChanged += delegate { kokoEvents++; };

            kokoProperty.Value = "howdy";
            kokoProperty.Value.Should().Be("howdy");
            kokoEvents.Should().Be(1);
            nativeEvents.Should().Be(1);
        }
        public void WrongPropertyNativeChange()
        {
            int nativeEvents = 0, kokoEvents = 0;
            var myNativeProperty = new MyWritableNativePropertyClass();

            myNativeProperty.PropertyChanged += delegate { nativeEvents++; };
            myNativeProperty.PartingPhrase    = "goodbye";

            var kokoProperty = new NativeWritableProperty <string>(myNativeProperty, nameof(myNativeProperty.Greeting));

            kokoProperty.PropertyChanged += delegate { kokoEvents++; };
            kokoProperty.Value.Should().BeNull();
            kokoEvents.Should().Be(0);

            myNativeProperty.PartingPhrase = "arrivederci";
            kokoProperty.Value.Should().BeNull();
            kokoEvents.Should().Be(0);
            nativeEvents.Should().Be(2);
        }
        public void KokoChange()
        {
            int nativeEvents = 0, kokoEvents = 0;
            var myNativeProperty = new MyWritableNativePropertyClass();

            myNativeProperty.PropertyChanged += delegate { nativeEvents++; };
            myNativeProperty.Greeting         = "hello";

            var kokoProperty = new NativeWritableProperty <string>(myNativeProperty, nameof(myNativeProperty.Greeting));

            kokoProperty.PropertyChanged += delegate { kokoEvents++; };
            kokoEvents.Should().Be(0);
            kokoProperty.Value.Should().Be("hello");

            kokoProperty.Value = "howdy";
            kokoProperty.Value.Should().Be("howdy");
            myNativeProperty.Greeting.Should().Be("howdy");
            kokoEvents.Should().Be(1);
            nativeEvents.Should().Be(2);
        }