Winform控件的数据绑定

1  绑定方法

    1.1  直接绑定   

           以下是一个输入框绑定一个对象属性:输入框_tbxWeith绑定对象_parcel的Weight属性:       

          _tbxWeight.DataBindings.Add("Text", _parcle, "Weight", false, DataSourceUpdateMode.OnPropertyChanged, "0.00", "0.00");

           以下是一个lable控件绑定一个控件:Label控件 _lblWeight绑定控件 _tbxWeight的Text属性:
          _lblWeight.DataBindings.Add("Text", _tbxWeight, "Text", false, DataSourceUpdateMode.Never);

     1.2  先创建Binding对象,再将Binding对象绑定到控件上
           Binding binding = new Binding("Text", _parcle, "Weight", false, DataSourceUpdateMode.OnPropertyChanged);
           _tbxWeight.DataBindings.Add(binding);

2  绑定的注意点

    2.1  绑定的对象类必须是class,绝对不能是record,如果是record,数据源更新,界面无法更新;

    2.2  绑定对象属性必须实现Property

            

public class Parcel : BaseBind
{
    public enum OrderTypes { UNKNOWN, LOCALE, INTERNATIONAL }
    public enum ProcStatuses { ScanDeliveryCode, LOCALE, SCAN_SEALCODE, SCAN_AIRWAYCODE, INTER_WAIT_CONFIRM }
    public OrderTypes OrderType { get; set; } = OrderTypes.UNKNOWN;
    public ProcStatuses ProcStatus { get; set; } = ProcStatuses.ScanDeliveryCode;
    double _weight = 0.00f;

    public double Weight
    {
        get => _weight;
        set
        {
            _weight = value;
           
            OnPropertyChanged(nameof(Weight));
        }
    }
    public void Init()
    {
        OrderType = OrderTypes.UNKNOWN;
        ProcStatus = ProcStatuses.ScanDeliveryCode;
        Weight = 0.00f;
    }
}
 public class BaseBind : INotifyPropertyChanged
 {
     public event PropertyChangedEventHandler? PropertyChanged;
     public virtual void OnPropertyChanged([CallerMemberName] String propertyName = "")
     {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
     }
 }

 

     

2.3  如果需要实现双向更新,必须设置Binding的属性DataSourceUpdateMode和ControlUpdateMode的值均为OnPropertyChanged

             ControlUpdateMode.OnPropertyChanged:数据源更新时,绑定控件项会被更新

             DataSourceUpdateMode.OnPropertyChanged:绑定控件项更新时,数据源会被更新

 2.4  更新数据源时,必须更新属性,而不是更新字段值

            在如下代码段中,如果更新Weight属性对应的字段_weight,绑定的控件就不会更新了。当调用Init()方法时,控件_txtWeight的值会发生变化。

 public void Init()
 {
     OrderType = OrderTypes.UNKNOWN;
     ProcStatus = ProcStatuses.ScanDeliveryCode;
     Weight = 0.00f;
 }

 

           

posted on 2026-06-10 10:29  博观约取*厚积薄发  阅读(8)  评论(0)    收藏  举报