Ich versuche, das .NET 2.0 ApplicationSettings-Feature zum ersten Mal zu verwenden, und finde es ein wenig ... rätselhaft in mancher Hinsicht. Ich hoffe, dass mir jemand helfen kann, herauszufinden, wo ich falsch liege.Aktualisieren gebundener Steuerelemente zu ApplicationSettings
Ich habe eine generische Einstellungs-Klasse, die ich implementiert habe, die eine Unterklasse von ApplicationSettingsBase ist. Ich habe eine Eigenschaft implementiert und markiert. Dies scheint zu funktionieren
Ich habe dann versucht, ein Listbox-Steuerelement an die Eigenschaft zu binden, und dies scheint auch zu funktionieren. Wenn ich das Formular öffne, lädt es die Eigenschaften gut.
Das Problem, das ich renne ist, dass, wenn ich die Einstellungen und Datenbindung aktualisieren möchte, ohne das Formular neu zu laden, es scheint nicht zu funktionieren. Es gibt keine Methoden, um die Bindung zu aktualisieren, und von was ich lese, sollte es nur automatisch aktualisieren (ApplicationSettingsBase implementiert IPropertyChangeNotify, die DataBindings abonnieren sollte .. aber es scheint nicht zu funktionieren). Sie können die Listbox auch nicht manuell aktualisieren, wenn Sie über eine DataBinding verfügen.
Also hier ist mein Code:
Settings.cs
public class Settings : ApplicationSettingsBase
{
public Settings()
{
if (FixedBooks == null) FixedBooks = new List<string>();
}
[UserScopedSetting()]
public List<string> FixedBooks
{
get { return (List<string>)this["FixedBooks"]; }
protected set { this["FixedBooks"] = value; }
}
}
SettingsForm.cs
Settings _settings = new Settings();
private void SettingsForm_Load(object sender, EventArgs e)
{
lbFixedColumns.DataBindings.Add(new Binding("DataSource", _settings,
"FixedBooks", false, DataSourceUpdateMode.OnPropertyChanged));
}
private void DoSomething()
{
_settings.FixedBooks.Add("Test");
}
Mein Verständnis ist, dass etwas zu den Application Hinzufügen des IPropertyChangedNotify Feuer sollte die Kontrolle alarmieren Bindung, dass die Eigenschaft geändert wurde, und erzwingen Sie es neu zu laden .. aber das scheint nicht zu geschehen.
Was fehlt mir?
EDIT:
Ich glaube, ich weiß, was das Problem ist. Das Problem ist, dass ich die Inhalte der Sammlung in der Settings-Klasse ändere, aber nicht die eigentliche Eigenschaft selbst ändere (was die Sammlung selbst ist). Ich denke, dass ich wirklich die gesamte Sammlung hinzufügen oder entfernen müsste, um das IPropertyChangedNotify auszulösen, das nicht geschieht.
Ich bin mir nicht sicher, was die Lösung für dieses Problem ist.
Das ist keine gute Option, weil es die Möglichkeit zum Abbrechen ohne Speichern von Einstellungen zerstört. Ich möchte nur Save() aufrufen, wenn ich Apply oder OK drücke. –
Doh! Dies ist eines der Probleme mit .NET, es ist so riesig, dass man dieses Zeug manchmal nicht finden kann ... 4 Stunden mit der Problemumgehung auf der Toilette mit der Lösung, für die es bestimmt ist ... –