ObservableCollection <T> in Winforms und mögliche Alternativen

Winforms .net 3.5 App. In meiner App habe ich eine allgemeine Klasse, die so aussieht:

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

und ich benutze es in allen meinen Dialogfeldern, wenn ich eine Art Filterfunktion implementieren möchte. Also rufe ich das Dialogformular mit einem Pre-Poulated aufList<FilterItem> im Konstruktor übergeben. Wenn der Dialog nun geladen wird, durchläuft er jedes Listenelement und fügt Folgendes hinzu:

Eine CheckboxEine ComboboxEine Textbox

zu jeder Zeile in einem TableLayoutPanel. Das Kontrollkästchen erhält seine Texteigenschaft vonFilterProperty und sein überprüfter Status vonFilterPropertyChecked... erhält die Combobox ihre Bindung vonFilterOperator... und die Textbox erhält ihren Textwert vonFilterValue.

Beachten Sie, wie ich nur sagebekommt. Ich möchte diese Eigenschaften automatisch aktualisieren, wenn sich die Steuerelemente ändern, deren Eigenschaften sie ändern müssen. Ich habe davon gehörtObservableCollection<T> aber ich scheine in Winforms keinen 'Zugriff' darauf zu haben, nachdem ich das hinzugefügt habeSystem.Collections.ObjectModel Namespace.

Was wäre der beste Weg, um dies zu erreichen. BindingList mit INotifyPropertyChanged ?? Ich bin kein Experte für Letzteres und würde einige Hinweise sehr schätzen - wenn dies der Weg ist, den ich gehen sollte.

Danke!

BEARBEITEN:

Ok, lassen Sie mich einen Code posten, um zu zeigen, was ich denke, dass ich tun sollte :). Ich weiß, dass ich implementieren mussINotifyPropertyChanged in meiner FilterItem-Klasse, also (nur für den FilterValue-Teil zum Beispiel):

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
}

Nun ist essollte alle kommen zusammen in meinem Form_Load (dies ist nur für den Textbox-Teil und ich habe die Checbox und die ComboBox weggelassen) wie folgt:

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

Die DataSource-Datenbindungen des Textfelds ist das FilterItem-Element. Aber jetzt habe ich anscheinend ein Problem mit meiner Visual Studio-IDE. Ich kann das nicht ausprobieren, werde es aber tun, wenn ich es zum Laufen habe. Was ich jetzt wissen möchte, ist: Wird dieses Setup erfolgreich dazu beitragen, dass meine Person zugelassen wird?FilterItems, um automatisch aktualisiert zu werden, wenn sich die jeweilige Eigenschaft des zugewiesenen Steuerelements ändert?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage