【发布时间】:2009-07-24 01:17:24
【问题描述】:
我第一次尝试使用 .NET 2.0 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 以提醒控件绑定该属性已更改,并强制它重新加载..但这似乎没有发生。
我错过了什么?
编辑:
我相信我知道问题出在哪里。问题是我正在更改设置类中集合的内容,但没有更改实际属性本身(即集合本身)。我想我必须实际添加或删除整个集合才能让 IPropertyChangedNotify 触发,这不会发生。
我不确定这个问题的解决方案是什么。
【问题讨论】:
标签: c# data-binding .net-2.0 settings