为什么我的类的行为与被重写的基类完全不同?

时间:2015-03-13 20:56:27

标签: c# combobox override settings application-settings

我的应用程序有一个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();

0 个答案:

没有答案