Обработка пользовательских настроек с помощью 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
интерфейс. затем, и вот разница, создайте только одну настройку для этого класса. Таким образом, его гораздо легче поддерживать.