.NET 2.0のApplicationSettings機能を初めて利用しようとしていますが、これは少し難解です。誰かが私がどこに間違っているのか理解できるように助けてくれることを願っています。バインドされたコントロールをApplicationSettingsに更新する
私は実装した汎用設定クラスがApplicationSettingsBaseのサブクラスです。私はプロパティを実装してタグ付けしました。これはうまくいくようです
私はリストボックスコントロールをプロパティにバインドしようとしましたが、これも機能するようです。私がフォームを開くと、プロパティーがうまく読み込まれます。
私が問題になっているのは、フォームをリロードしないで設定やデータバインドを更新したい場合、動作していないようです。バインディングをリフレッシュするメソッドはありません。私が読んでいるものから、自動更新する必要があります(ApplicationSettingsBaseはIPropertyChangeNotifyを実装していますが、DataBindingsに登録する必要がありますが、動作していないようです)。また、データバインディングがある場合は、リストボックスを手動で更新することもできません。
だからここに私のコードです:
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");
}
私の理解では、ApplicationSettingsに何かを追加すると、コントロールを警告するIPropertyChangedNotifyを発射すべきであるということですプロパティが変更されたことをバインドし、強制的にリロードします。しかし、これは起こっていないようです。
私には何が欠けていますか?
編集:
私は問題が何であるか知っていると思います。問題は、私はSettingsクラスのコレクションの内容を変更していますが、実際のプロパティ自体(コレクション自体)は変更していないということです。実際にIPropertyChangedNotifyを起動させるには、コレクション全体を実際に追加したり削除したりしなければならないと思いますが、これは起きていません。
この問題の解決方法はわかりません。
これは、設定を保存せずにキャンセルする機能を無効にするため、適切ではありません。私はApplyまたはOKを押すとSave()を呼び出すだけです。 –
Doh!これは.NETの問題の1つですが、それは非常に巨大で、時にはこのようなものを見つけることができません...解決策が見つかってから4時間が経過しました。 –