ObservableCollection <T> в Winforms и возможных альтернативах
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
прошло в конструкторе. Теперь, когда диалог загружается, он перебирает каждый элемент списка и добавляет:
к каждой строке в TableLayoutPanel. Флажок получает свое текстовое свойство отFilterProperty
и его статус Проверено отFilterPropertyChecked
... Combobox получает свою привязку отFilterOperator
... и Textbox получает свое текстовое значение из.FilterValue
Обратите внимание, как я только говорюполучает, То, что я хотел бы сделать, это автоматически обновить эти свойства, когда элементы управления, свойства которых они должны изменить. Я слышал оObservableCollection
но у меня, похоже, нетдоступ' к нему в 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 (это только для части Textbox, и я опустил Checbox и ComboBox) следующим образом:
private List FilterList; //