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