Сохранение пользовательских настроек (ApplicationSettingsBase)

Я пытаюсь сохранить настройки приложения, когда пользователь выходит из формы конфигурации (а не из моей основной формы). Он сохранит настройки в памяти, потому что когда я снова открою форму, мои данные, которые я настроил, будут там еще сохранены, но не сохранятся на диск. Это путь к файлу, в который он сохраняет файл XML

C:\Users\david_000\AppData\Local[название компании][имя проекта]\1.0.0.0.

Я использую [UserScopedSetting()] в моем классе, который реализует файл ApplicationSettingsBase, поэтому он должен сохранять при вызове,

Properties.Settings.Default.Save(); 

Это мой класс, который использует ApplicationSettingsBase

public class DeviceConfiguration : ApplicationSettingsBase
{
    /// <summary>
    /// Initializes a new instance of the <see cref="DeviceConfiguration"/> class.
    /// </summary>
    public DeviceConfiguration()
        : base()
    {
        this.MasterDevices = new BindingList<Device>();
        this.SlaveDevices = new BindingList<Device>();
    }

    [UserScopedSetting()]
    [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
    public BindingList<Device> MasterDevices
    {
        get
        {
            return this["MasterDevices"] as BindingList<Device>;
        }

        set
        {
            this["MasterDevices"] = value;
        }
    }

    [UserScopedSetting()]
    [SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
    public BindingList<Device> SlaveDevices
    {
        get
        {
            return this["SlaveDevices"] as BindingList<Device>;
        }

        set
        {
            this["SlaveDevices"] = value;
        }
    }
}

Мой BindingList содержит несколько свойств, и этот класс использует атрибут [Serializable]. Но когда я сохраняю XML-файл, все, что он сохраняет, это:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <[company.project].Properties.Settings>
            <setting name="IpAddressBESS" serializeAs="String">
                <value>192.168.3.254</value>
            </setting>
            <setting name="PortBESS" serializeAs="String">
                <value>504</value>
            </setting>
            <setting name="IpAddressInverter" serializeAs="String">
                <value>192.168.3.200</value>
            </setting>
            <setting name="PortInverter" serializeAs="String">
                <value>502</value>
            </setting>
            <setting name="StartDate" serializeAs="String">
                <value>04/08/2015 08:00:00</value>
            </setting>
            <setting name="EndDate" serializeAs="String">
                <value>04/08/2015 16:00:00</value>
            </setting>
            <setting name="DeviceConfig" serializeAs="Xml">
                <value />
            </setting>
        </[company.project].Properties.Settings>
    </userSettings>
</configuration>

Любой совет по этому вопросу будет принята с благодарностью.

1 ответ

Решение

Без хорошего, минимального, полного примера кода, который надежно воспроизводит проблему, невозможно точно сказать, в чем проблема.

Однако, исходя из того, что вы опубликовали, кажется, что вы можете неправильно понять отношения между Дизайнером настроек и вашим пользовательским ApplicationSettingsBase учебный класс.

Особенно, Properties.Settings.Default обычно возвращает экземпляр созданного в Designer класса с именем Settings, призвание Properties.Settings.Default.Save(); сохранит только значения в этом объекте, а не в каком-либо другом классе.

Если у вас есть отдельный класс DeviceConfiguration что вы хотите сохранить (как вы, кажется, в коде, который вы опубликовали), вы должны обрабатывать это явно. Просто наличие экземпляра подкласса ApplicationSettingsBase не буду этого делать Вам нужно позвонить Save() Метод этого пользовательского подкласса самостоятельно.

См. Также Как создать настройки приложения в MSDN.

Другие вопросы по тегам