2014-01-22 5 views
6

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

На данный момент я устанавливаю мои настройки, как показано в следующем примере кода в моем 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

+0

Вы можете напрямую связать с настройками '{x: Static Settings.Default.Whatevs}', а затем в вашем окне смотреть событие Close, после чего вы можете сохранить настройки. Настройки пользовательского интерфейса - это проблема «Вид». – Will

ответ

8

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

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

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

2

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

Смежные вопросы