我試圖第一次使用.NET 2.0 ApplicationSettings功能,並發現它有點...在某些方面令人費解。我希望有人能幫我弄清楚我哪裏出錯了。更新綁定控件到ApplicationSettings
我有一個通用設置類,我已經實現了這是ApplicationSettingsBase的一個子類。我已經實現了一個屬性,並對其進行了標記。這似乎工作
我試圖將一個列表框控件綁定到屬性,這也似乎工作。當我打開表單時,它加載屬性就好了。
我遇到的問題是,如果我想更新設置和數據綁定而不重新加載窗體,它似乎不工作。沒有方法來刷新綁定,並從我正在閱讀,它應該只是自動更新(ApplicationSettingsBase實現IPropertyChangeNotify,DataBindings應該訂閱..但它似乎並沒有工作)。如果您有DataBinding,您也不能手動更新列表框。
因此,這裏是我的代碼:
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觸發,這不會發生。
我不確定這個問題的解決方案是什麼。
這不是一個好的選擇,因爲它破壞了不保存設置而取消的功能。我只想在應用或確定時調用Save()。 – 2009-07-24 01:44:40