ObservableCollection <T> no WinForms e possíveis alternativas

Winforms .net 3.5 app. No meu aplicativo eu tenho uma classe genérica que se parece com isso:

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

e eu uso em todas as minhas caixas de diálogo quando quero implementar algum tipo de funcionalidade de filtro. Então eu chamo o formulário de diálogo com um pré-poulatedList<FilterItem> passado no construtor. Agora, quando a caixa de diálogo é carregada, itera através de cada item de lista e adiciona:

Uma caixa de seleçãoUm comboboxUma caixa de texto

para cada linha em um TableLayoutPanel. A caixa de seleção obtém sua propriedade de texto deFilterProperty e seu status verificado deFilterPropertyChecked... o Combobox recebe sua ligação deFilterOperator... e a caixa de texto obtém seu valor de texto deFilterValue.

Observe como eu estou apenas dizendofica. O que eu gostaria de fazer é atualizar automaticamente essas propriedades quando os controles cujas propriedades eles estão vinculados a alterar. Eu ouvi sobreObservableCollection<T> mas eu não pareço ter 'acesso' a ele no WinForms depois de adicionar oSystem.Collections.ObjectModel namespace.

Qual seria a melhor maneira de conseguir isso? BindingList com INotifyPropertyChanged? Eu não sou um especialista com este último, e gostaria muito de algumas dicas - se é assim que eu deveria ir.

Obrigado!

EDITAR:

Ok, deixe-me postar algum código para mostrar o que eu acho que deveria estar fazendo :). Eu sei que preciso implementarINotifyPropertyChanged na minha classe FilterItem, então (apenas para a parte FilterValue por exemplo):

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
}

Agoradevemos todos vêm juntos no meu Form_Load (isso é apenas para a parte da caixa de texto e eu omiti o Checbox e ComboBox) da seguinte forma:

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

as ligações de dados da caixa de texto DataSource é o 'item' FilterItem. Mas agora parece que estou tendo um problema com o IDE do meu visual studio, então não posso tentar fazer isso, mas quando estiver pronto e funcionando. O que eu gostaria de saber agora é: essa configuração ajudará a permitir que meu clienteFilterItems para ser atualizado automaticamente quando a respectiva propriedade do Controle atribuído muda ??

questionAnswers(1)

yourAnswerToTheQuestion