我试图第一次使用.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