我的应用程序有一个ComboBox
,其应用程序设置myStrings
类型为System.Collections.Specialized.StringCollection
。我将ComboBox.ItemSource
绑定到Properties.Settings.Default.myStrings
。按照我的计划,ComboBox显示了myStrings的项目。
不幸的是,当myStrings发生变化时,ComboBox没有更新项目。所以我尝试创建一个新的类CustomStringCollection
来覆盖StringCollection并实现INotifyPropertyChanged
。
设置未正确保存。我确实期望CustomStringCollection : StringCollection
的行为与其基类完全相同,包括保存时。为什么不一样?
这是设置文件,您可以看到myStrings-values已保存,但myCustomStringCollection-values不是:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
…
<userSettings>
<comboBoxDataBinding.Properties.Settings>
<setting name="myStrings" serializeAs="Xml">
<value>
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>Banana</string>
</ArrayOfString>
</value>
</setting>
<setting name="myCustomStringCollection" serializeAs="Xml">
<value />
</setting>
</comboBoxDataBinding.Properties.Settings>
</userSettings>
</configuration>
这是类comboBoxDataBinding:
using System.ComponentModel;
using System.Configuration;
using System.Reflection;
namespace comboBoxDataBinding {
[DefaultMember("Item")]
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
class CustomStringCollection : System.Collections.Specialized.StringCollection, INotifyPropertyChanged {
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string v) {
if (PropertyChanged != null) {
PropertyChanged(this, new PropertyChangedEventArgs(v));
}
}
}
}
这就是我保存这些设置的方式:
Properties.Settings.Default.myStrings.Add("Banana");
Properties.Settings.Default.myCustomStringCollection.Add("Banana");
Properties.Settings.Default.Save();