Обработка пользовательских настроек с помощью MVVM


В настоящее время я разрабатываю приложение WPF с фреймворком MVVM-light.

В данный момент я устанавливаю свои настройки, как показано в следующем примере кода в моей viewmodel:

private string _property

public string Property
{
    get { return _property; }
    set
    {
        if (_property != value)
        {
            _property = value;
            Settings.Default.Property = value;
            RaisePropertyChanged("Property");
        }
    }
}

Я сохраняю свои настройки при выходе из приложения:

protected override void OnExit(ExitEventArgs e)
{
    Settings.Default.Save();
}

Все работает, как задумано, но ...

Вопрос: это правильный подход или есть лучший способ обработки настроек в MVVM

2 6

2 ответа:

Если вы хотите изменить настройки на основе свойств вашего ViewModel, ваш подход будет работать. Единственная проблема заключается в том, что ваш ViewModel тесно связан с классом System.Configuration.ApplicationSettingsBase.

Я бы создал класс-оболочку, реализующий интерфейс (скажем, IConfigProvider ), который предоставляет все ваши настройки в виде свойств и метода Save и вводит его в ваш ViewModel. Таким образом, вы можете передать макет \ stub при модульном тестировании вашего ViewModel.

Еще одно преимущество заключается в том, что если вы когда-либо решите изменить способ хранения ваших конфигурационных значений (скажем, вы хотите сохранить некоторые настройки в базе данных), вам не нужно прикасаться к вашему ViewModels, поскольку вся эта работа выполняется в вашем ConfigProvider классе.

Есть гораздо более простой способ... ну, "путь" тот же, но вместо того, чтобы добавлять настройку для каждого свойства, просто создайте класс Settings с всеми вашими свойствами... объявите их нормальными свойствами и реализуйте обычный интерфейс INotifyPropertyChanged. затем, и вот в чем разница, создайте только один параметр для этого класса. Таким образом, его гораздо легче поддерживать.