Winforms .net 3.5 app。在我的应用我有一个泛型类,看起来像这样:Winforms中的ObservableCollection <T>以及可能的备选方案
public class FilterItem {
public FilterItem() { }
public string FilterProperty { get; set; }
public bool FilterPropertyChecked { get; set; }
public ComparitiveOperator FilterOperator { get; set; }
public string FilterValue { get; set; }
}
我用它在我所有的对话框时,我想实现某种过滤功能。所以我把这个对话框称为在构造函数中传递的预先拼接的List<FilterItem>
。现在,当对话框加载时,它遍历每个直通列表项,并增加了:
- 一个复选框
- 一个ComboBox
- 一个TextBox
在一个TableLayoutPanel中的每一行。复选框的文本属性为FilterProperty
,其检查状态为FilterPropertyChecked
...组合框从FilterOperator
获得绑定...并且文本框的文本值为FilterValue
。
注意如何我只说得到。我想要做的是自动更新这些属性,当它们的属性被绑定的控件改变时。我听说过ObservableCollection<T>
,但是在添加System.Collections.ObjectModel
命名空间后,我似乎没有在Winforms中“访问”它。
什么是最好的方式来实现这一点。 BindingList与INotifyPropertyChanged?我不是后者的专家,并且非常感谢一些提示 - 如果这是我应该去的方式。
谢谢你!
编辑:
好吧,让我来发布一些代码来显示什么,我认为我应该做的:)。我知道我需要实现INotifyPropertyChanged
我的FilterItem类,所以(只为FilterValue部分为例):
public class FilterItem : INotifyPropertyChanged {
public FilterItem() { }
public string FilterProperty { get; set; }
public bool FilterPropertyChecked { get; set; }
public ComparitiveOperator FilterOperator { get; set; }
private string _FilterValue;
public string FilterValue {
get { return this._FilterValue; }
set {
if (this._FilterValue != value) {
this._FilterValue = value;
this.OnFilterValueChanged();
}
}
}
#region INotifyPropertyChanged Members
protected void OnFilterValueChanged() {
var handler = this.PropertyChanged;
if (handler != null) {
handler(this, new PropertyChangedEventArgs("FilterValue"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
现在应该都在我的Form_Load走到一起(这仅仅是文本框部分,我省略了,像这样的Checbox和ComboBox):
private List<FilterItem> FilterList; // <-- this gets assigned to in the constructor
private void dlgFilterData_Load(object sender, EventArgs e) {
foreach (FilterItem item in FilterList) {
txt = new TextBox();
txt.DataBindings.Add("Text", item, "FilterValue", false, DataSourceUpdateMode.OnPropertyChanged);
txt.Dock = DockStyle.Fill;
}
}
文本框的数据绑定数据源是的FilterItem“项”。但是现在我的视觉工作室IDE似乎遇到了问题,所以无法尝试,但是在启动并运行时会出现问题。我现在想知道的是:将这种设置成功帮助让我个人FilterItem
s到时得到的分配控制的各个属性的更改自动更新?
我是否也应该使用BindingList而不是普通列表? –
Shalan