原来winform也可以支持mvvm双向绑定

        winform控件有个属性DataBindings,以前从来没有用过,从网上看到只需要设置这个属性就能轻松实现数据绑定。代码如下:

 private void Form1_Load(object sender, EventArgs e)
        {   
            textBox1.DataBindings.Add("Text", tt, "Name");
            label1.DataBindings.Add("Text", tt, "Name");
            textBox2.DataBindings.Add("Text", tt, "Age");
            label2.DataBindings.Add("Text", tt, "Age");
        }

运行效果如下:

在姓名后面输入文字,在数据验证事件完成后,viewmode数据同步更新,绑定lable后,lable就能自动更新内容。

当然要想实现上面的功能,还需要自定义viewmode类。

public class V_test:V_Base
    {
        public string Name { 
            get => GetProperty<string>(); 
            set => SetProperty(value); }
        public int Age
        {
            get => GetProperty<int>();
            set => SetProperty(value);
        } 
    }

这样就实现了一个简单的viewmode类,简不简单?优不优雅?

附上基类的实现

/// <summary>
    /// 多少会影响一点性能,大数据处理慎重使用
    /// </summary>
    public class V_Base : INotifyPropertyChanged
    {
  
        private Dictionary<string,object> ppts=new Dictionary<string,object>();
        public void DoNotify([CallerMemberName] string propName = "")
        {            
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        }

      //  protected PropertyChangedEventHandler PropertyChangedHandler => this.PropertyChanged;

        public event PropertyChangedEventHandler PropertyChanged;

        protected T GetProperty<T>([CallerMemberName] string propName = "")
        {
            T re=default(T);
            if (ppts.ContainsKey(propName))
            { 
                re= (T)ppts[propName];
            }
            return re;
        }
        protected void SetProperty(object value,[CallerMemberName] string propName = "")
        {
            if (ppts.ContainsKey(propName))
            {
                ppts[propName] = value;
            }
            else
            {
                ppts.Add(propName, value);
            }
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值