2014-01-22 3 views
6

현재 MVVM-light 프레임 워크로 WPF 응용 프로그램을 개발 중입니다.MVVM을 사용한 사용자 설정 처리

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 이벤트를 감시하면 설정을 저장할 수 있습니다. UI 설정은 View 관심사입니다. – Will

답변

8

ViewModel의 속성을 기반으로 설정을 변경하려는 경우 접근 방법이 효과적입니다. 유일한 문제는 ViewModelSystem.Configuration.ApplicationSettingsBase 클래스와 밀접하게 결합되어 있다는 것입니다.

나는 속성 및 저장 방법으로 모든 설정을 노출하고 ViewModel으로 그것을 주입하는 인터페이스 (예를 들어 IConfigProvider)를 구현하는 래퍼 클래스를 만드는 것입니다. 이 방법으로 단위 테스트를 할 때 ViewModel을 테스트 할 때 모의 \ 스텁을 전달할 수 있습니다.

또 다른 이점은 구성 값을 저장하는 방식을 변경하려는 경우 (데이터베이스에 일부 설정을 저장하려는 경우) 해당 작업이 모두 완료되면 ViewModels을 터치 할 필요가 없다는 것입니다 ConfigProvider 클래스

2

'방법'은 동일하지만 각 속성에 대한 설정을 추가하는 대신 의 모든 속성이있는 인 클래스를 Settings 클래스로 만듭니다. 일반 속성을 구현하고 일반적인 INotifyPropertyChanged 인터페이스를 구현하십시오. 다음, 그리고 차이점은이 클래스에 대해 하나의 설정 만 작성하십시오. 그렇게하면 유지 관리가 훨씬 쉬워집니다.