不卡视频在线观看_三级网站视频在线观看_91精品网站_国产综合一区二区

完善主體資料,免費贈送VIP會員!
* 主體類型
* 企業名稱
* 信用代碼
* 所在行業
* 企業規模
* 所在職位
* 姓名
* 所在行業
* 學歷
* 工作性質
請先選擇行業
您還可以選擇以下福利:
行業福利,領完即止!

下載app免費領取會員

NULL

ad.jpg

二次開發教程:研究下WPF 數據binding 原理

發布于:2019-07-24 16:38:12

網友投稿

更多

測試相關類


    public class HostTest 

    {

        public string Value{get; set;}

 

        public string Value1 {get ;set ;}

    }

    public class Test 

    {

        private string _value = null;

        public string Value

        {

            get { return _value; }

            set

            {

                _value = value;                

            }

        }

 

        private string _value1 = null;

        public string Value1

        {

            get { return _value1; }

            set

            {

                _value1 = value;               

            }

        }

    }

實現效果是將一個HostTest 對象的兩個屬性綁定到Test的兩個屬性上,然后實現HostTest對應的屬性改變,兩個Test 對象的屬性也自動修改,反之亦然,實現代碼如下:


namespace BindingDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            var host = new HostTest();

            var test = new Test();

            var test1 = new Test();

            

            host.AddBinding("Value", new Binding(test, "Value"));

            host.AddBinding("Value1", new Binding(test, "Value1"));

 

            host.AddBinding("Value", new Binding(test1, "Value"));

            host.AddBinding("Value1", new Binding(test1, "Value1"));

 

            host.Value = "Test1";

            host.Value1 = "Test1";

 

            Console.WriteLine(test.Value);//Test1

            Console.WriteLine(test.Value1);//Test1

 

            Console.WriteLine(test1.Value);//Test1

            Console.WriteLine(test1.Value1);//Test1

 

            test.Value = "Test2";

            test.Value1 = "Test2";

            Console.WriteLine(host.Value);//Test2

            Console.WriteLine(host.Value1);//Test2

            Console.WriteLine(test1.Value);//Test2

            Console.WriteLine(test1.Value1);//Test2

            Console.ReadLine();

        }

    }

 

    public delegate void OnPropertyChanged(object obj,string name);

 

    public interface INotifier

    {

        OnPropertyChanged OnPropertyChanged { get; set; }

    }

 

    public class Binding

    {

        public object Host { get; set; }

        public string HostProperty { get; set; }

        public object Target { get; set; }

        public string Property { get; set; }

 

        public Binding(object target, string property)

        {

            Target = target;

            Property = property;

        }

 

        internal void UpdateTargetValue(object value)

        {

            var property = Target.GetType().GetProperty(Property);

            property.SetValue(Target, value);

        }

 

        internal void UpdateHostValue()

        {

            var property = Target.GetType().GetProperty(Property);

            object value = property.GetValue(Target);

            property = Host.GetType().GetProperty(HostProperty);

            property.SetValue(Host, value);

        }

    }

 

    public abstract class BindingHostBase

    {

        private Dictionary<string, object> _values = new Dictionary<string, object>();

        private List<Binding> _bindings = new List<Binding>();

        private Dictionary<string, List<Binding>> _bindDict = new Dictionary<string, List<Binding>>();

 

        public void AddBinding(string propertyName, Binding binding)

        {

            if (!_bindDict.ContainsKey(propertyName))

            {

                _bindDict.Add(propertyName, new List<Binding>() {});

            }

 

            var bindings = _bindDict[propertyName];

            if (bindings.Contains(binding))

            {

                return;

            }

 

            bindings.Add(binding);

            _bindings.Add(binding);

 

            binding.Host = this;

            binding.HostProperty = propertyName;

            var notifier = binding.Target as INotifier;

            if (notifier.OnPropertyChanged == null)

            {

                notifier.OnPropertyChanged = (obj, name) =>

                {

                    var bds = _bindings.Where(b => b.Target == obj && b.Property == name).ToList();

                    if (bds != null)

                        bds.ForEach(b => b.UpdateHostValue());

                };

            }

 

        }

 

        public void SetValue(string name, object value)

        {

            if (_values.ContainsKey(name))

            {

                bool flag = _values[name] != value;

                _values[name] = value;

                if(flag)

                _bindDict[name].ForEach(b=>b.UpdateTargetValue(value));

            }

            else

            {

                _values.Add(name, value);

                _bindDict[name].ForEach(b => b.UpdateTargetValue(value));

            }

        }

 

        public object GetValue(string name)

        {

            if (_values.ContainsKey(name))

            {

                return _values[name];

            }

            return null;

        }

    }

 

    public class HostTest : BindingHostBase

    {

        public string Value

        {

            get { return (string) GetValue(nameof(Value)); }

            set { SetValue(nameof(Value), value); }

        }

 

        public string Value1

        {

            get { return (string)GetValue(nameof(Value1)); }

            set { SetValue(nameof(Value1), value); }

        }

    }

 

    public class Test : INotifier

    {

        private string _value = null;

 

        public string Value

        {

            get { return _value; }

            set

            {

                _value = value;

                RaisePropertyChanged(nameof(Value));

            }

        }

 

        private string _value1 = null;

 

        public string Value1

        {

            get { return _value1; }

            set

            {

                _value1 = value;

                RaisePropertyChanged(nameof(Value1));

            }

        }

 

        public OnPropertyChanged OnPropertyChanged { get ; set ; }

 

        public void RaisePropertyChanged(string name)

        {

            OnPropertyChanged?.Invoke(this, name);

        }

    }

 

}

本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

未標題-1.jpg

上一篇:二次開發教程:Hello Emit

下一篇:二次開發教程:MyBatis增刪查改

60acb4e0ef112.png
不卡视频在线观看_三级网站视频在线观看_91精品网站_国产综合一区二区

      9000px;">

          日韩视频一区二区在线观看| 国产成人超碰人人澡人人澡| www国产成人免费观看视频 深夜成人网| 丰满亚洲少妇av| 日韩综合小视频| 亚洲精品视频在线看| 国产亚洲成av人在线观看导航| 91精品国产综合久久福利软件| 97精品电影院| eeuss影院一区二区三区| 久久精品国产亚洲a| 日韩综合小视频| 午夜久久久久久久久久一区二区| 洋洋av久久久久久久一区| 国产精品国产三级国产aⅴ中文| 国产欧美精品区一区二区三区| 精品国产免费人成电影在线观看四季| 7777精品伊人久久久大香线蕉| 在线免费观看视频一区| 色哟哟日韩精品| 91黄色免费网站| 欧美日韩免费视频| 欧美日韩不卡视频| 欧美日韩国产一二三| 91精品国产91久久久久久最新毛片| 欧美亚洲一区二区在线| 欧美日韩高清一区二区三区| 欧美一区午夜精品| 日韩女优制服丝袜电影| 欧美激情综合在线| 亚洲一区二区欧美日韩| 免费av网站大全久久| 精品亚洲国产成人av制服丝袜| 国产中文一区二区三区| 成人av网址在线| 欧美亚一区二区| 欧美一区二区三区公司| 亚洲国产精品黑人久久久| 亚洲欧美视频一区| 蜜臀av一区二区在线免费观看 | 成年人网站91| 欧美亚洲尤物久久| 欧美www视频| 综合欧美亚洲日本| 天堂成人国产精品一区| 国产一区二区三区四区在线观看| 国产精品一区二区免费不卡 | 青青草原综合久久大伊人精品优势 | 久久国产精品99久久久久久老狼| 国产成人三级在线观看| 欧美亚日韩国产aⅴ精品中极品| 欧美一区二区视频观看视频| 亚洲国产成人自拍| 蜜桃一区二区三区四区| 国产伦精品一区二区三区视频青涩 | 午夜久久久久久久久久一区二区| 国产精品原创巨作av| 欧美午夜一区二区三区免费大片| 精品国产制服丝袜高跟| 亚洲另类春色国产| 国产精品影视网| 日韩写真欧美这视频| 一级中文字幕一区二区| 国产精品一区二区不卡| 日韩视频在线永久播放| 亚洲成年人影院| www.色精品| 欧美国产日韩亚洲一区| 日韩1区2区日韩1区2区| 欧美性三三影院| 国产精品全国免费观看高清 | 色综合 综合色| 久久久国产午夜精品| 日日摸夜夜添夜夜添国产精品| 99久久久久免费精品国产| 久久久久国色av免费看影院| 奇米一区二区三区av| 欧美日韩大陆在线| 国产精品人人做人人爽人人添| 国产一区二区三区四区在线观看| 日韩一区二区电影在线| 亚洲成人综合网站| 欧美日韩国产小视频| 亚洲成人av中文| 91小视频在线免费看| 最新中文字幕一区二区三区| 97久久精品人人做人人爽50路| 国产欧美一区二区三区鸳鸯浴| 国产一区二区在线影院| 欧美xxxxxxxx| 国产成人精品亚洲777人妖| 国产三级精品三级在线专区| 国产精品羞羞答答xxdd| 久久精品一区二区三区不卡 | 国产精品色眯眯| 成人免费福利片| 中文字幕亚洲不卡| 欧美性三三影院| 青青草成人在线观看| 欧美日韩国产bt| 久久av中文字幕片| 日韩精品一区国产麻豆| 久久草av在线| 中文一区二区完整视频在线观看 | 精品欧美乱码久久久久久 | 国产亚洲精品久| 成人爱爱电影网址| 亚洲免费色视频| 日韩一区二区影院| 九色porny丨国产精品| 国产精品国产三级国产专播品爱网| 成人免费av在线| 天天综合色天天| 亚洲精品一区二区三区在线观看| 成人综合在线观看| 亚洲另类中文字| 日韩精品专区在线| 91老师片黄在线观看| 午夜精品久久久久久久 | 国产精品一卡二| 亚洲一区二区三区中文字幕| 日韩欧美国产三级电影视频| av在线不卡免费看| 男女男精品视频| 亚洲人成网站在线| 精品少妇一区二区三区视频免付费| va亚洲va日韩不卡在线观看| 青青草97国产精品免费观看无弹窗版| 中文一区在线播放| 精品国产成人系列| 欧美日韩mp4| 成人91在线观看| 麻豆国产一区二区| 亚洲黄色片在线观看| 精品粉嫩超白一线天av| 欧美中文字幕一区二区三区| 韩国女主播成人在线观看| 亚洲午夜电影网| 国产精品久久久久久久岛一牛影视 | 久久精品视频一区二区| 欧美午夜片在线看| 成人av综合一区| 精品一区二区精品| 日韩av一区二区在线影视| 国产精品国产精品国产专区不蜜| 日韩精品中文字幕一区| 欧美一级在线免费| 欧美日本韩国一区二区三区视频| 色综合欧美在线| 懂色av噜噜一区二区三区av| 亚洲va韩国va欧美va| 亚洲美女在线国产| 亚洲精品成人在线| 国产欧美日韩另类视频免费观看 | 精品一区二区av| 久久激情五月激情| 五月天一区二区| 亚洲视频免费在线观看| 国产精品久久久久久久久快鸭 | 色激情天天射综合网| 久久久91精品国产一区二区三区| 欧美大白屁股肥臀xxxxxx| 在线看一区二区| 高清成人免费视频| 国产精品一区二区在线观看不卡| 婷婷综合另类小说色区| 亚洲国产精品视频| 奇米影视一区二区三区| 99这里都是精品| 成人激情av网| 色伊人久久综合中文字幕| 成人av集中营| 欧美男男青年gay1069videost| 欧美午夜影院一区| 欧美高清视频在线高清观看mv色露露十八 | 国内久久婷婷综合| 国产成人精品免费视频网站| 成人毛片在线观看| 欧美在线综合视频| 欧美精品v国产精品v日韩精品| 337p亚洲精品色噜噜| 久久天天做天天爱综合色| 国产欧美综合色| 亚洲免费av高清| 国产精品一区二区在线观看不卡| 成人理论电影网| 日韩一区二区视频在线观看| 欧美激情在线看| 日本不卡一区二区三区 | 国产精品久久久久久久久免费桃花| 一区二区三区资源| 91麻豆视频网站| 久久看人人爽人人| 青青草97国产精品免费观看| 在线免费亚洲电影| 中文字幕一区二区三区在线播放| 激情丁香综合五月| 久久综合九色综合欧美就去吻| 亚洲国产日韩综合久久精品| 91在线视频免费观看|