Обработка пользовательских настроек с помощью 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 ответов


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

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

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


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