ObservableCollection <T> w Winforms i możliwe alternatywy

Aplikacja Winforms .net 3.5. W mojej aplikacji mam klasę ogólną, która wygląda tak:

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; }
}

i używam go we wszystkich moich oknach dialogowych, gdy chcę zaimplementować jakąś funkcjonalność filtra. Tak więc nazywam formularz okna dialogowego z pre-poulatedList<FilterItem> przekazane w konstruktorze. Teraz, gdy okno dialogowe zostanie załadowane, przechodzi iteracyjnie przez każdy element listy i dodaje:

Pole wyboruOpakowanie zbiorczePole tekstowe

do każdego wiersza w tabeli TableLayoutPanel. Pole wyboru pobiera jego właściwość tekstowąFilterProperty i jego status sprawdzony zFilterPropertyChecked... Combobox otrzymuje swoje powiązanieFilterOperator... i pole tekstowe pobiera jego wartość tekstowąFilterValue.

Zauważ, jak tylko mówiędostaje. Chciałbym automatycznie zaktualizować te właściwości, gdy kontrolki, których właściwości będą musiały się zmienić. słyszałem oObservableCollection<T> ale wydaje mi się, że nie mam dostępu do niego w WinForm po dodaniuSystem.Collections.ObjectModel przestrzeń nazw.

Jaki byłby najlepszy sposób, aby to osiągnąć. BindingList z INotifyPropertyChanged? Nie jestem ekspertem w tej ostatniej i byłbym bardzo wdzięczny za pewne wskazówki - jeśli tak powinienem iść.

Dziękuję!

EDYTOWAĆ:

Ok, pozwól, że opublikuję kod, aby pokazać, co powinienem zrobić :). Wiem, że muszę wdrożyćINotifyPropertyChanged na mojej klasie FilterItem, więc (na przykład dla części 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
}

Teraz topowinien wszystko razem w moim Form_Load (to jest tylko dla części Textbox i pominąłem Checbox i ComboBox) tak:

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;
    }
}

DataSindings w polu tekstowym DataSource to element „FilterItem”. Ale teraz wydaje mi się, że mam problem z moim Visual Studio IDE, więc nie mogę tego wypróbować, ale kiedy będę miał go uruchomione. Chciałbym teraz wiedzieć: czy ta konfiguracja będzie z powodzeniem pomagać mojej osobieFilterItems, aby uzyskać automatyczną aktualizację, gdy odpowiednie zmiany właściwości przypisanej im Kontroli ??

questionAnswers(1)

yourAnswerToTheQuestion