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; }
浙公网安备 33010602011771号