Winforms .net 3.5 应用程序。在我的应用程序中,我有一个看起来像这样的通用类:
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>
所以我用构造函数中传递的预填充来调用对话框表单。现在,当对话框加载时,它会遍历每个列表项并添加:
- 一个复选框
- 组合框
- 一个文本框
到 TableLayoutPanel 中的每一行。Checkbox 从...获取其文本属性FilterProperty
及其 Checked 状态FilterPropertyChecked
...Combobox 从...获取其绑定,FilterOperator
而 Textbox 从...获取其文本值FilterValue
。
注意我只说得到。我想做的是在它们的属性必须更改的控件时自动更新这些属性。我听说过,ObservableCollection<T>
但在添加命名空间后,我似乎无法在 Winforms 中“访问”它System.Collections.ObjectModel
。
实现这一目标的最佳方法是什么。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;
}
}
文本框的数据绑定 DataSource 是 FilterItem 的“项目”。但是现在我的 Visual Studio IDE 似乎有问题,所以不能尝试这个,但是当我启动并运行它时会。我现在想知道的是:此设置是否会成功地帮助我的个人FilterItem
在他们分配的 Control 各自的属性发生变化时自动更新?