MVVM 아키텍처에서 일부 코드를 리팩토링하려고합니다.
모델에 직접 변경되는 공개 값이 있습니다.MVVM의 모델에서 뷰로의 속성 변경을 정의하는 가장 좋은 방법은 무엇입니까?
UI는 이러한 값의 변경을 수신 대기합니다.
다음public string LoadFilename { get { return _loadFilename; } set { _loadFilename = value; OnPropertyChanged(); } }
public string SaveFilename { get { return _saveFilename; } set { _saveFilename = value; OnPropertyChanged(); } }
public string OneSafFilename { get { return _oneSafFilename; } set { _oneSafFilename = value; OnPropertyChanged(); } }
public bool IsSaveEnabled { get { return _isSaveEnabled; } set { _isSaveEnabled = value; OnPropertyChanged(); } }
public bool IsLoadEnabled { get { return _isLoadEnabled; } set { _isLoadEnabled = value; OnPropertyChanged(); } }
public bool IsLoadCheckpointEnabled { get { return _isLoadCheckpointEnabled; } set { _isLoadCheckpointEnabled = value; OnPropertyChanged(); } }
public bool IsCheckpointEnabled { get { return _isCheckpointEnabled; } set { _isCheckpointEnabled = value; OnPropertyChanged(); } }
public bool IsScenariosEnabled { get { return _isScenariosEnabled; } set { _isScenariosEnabled = value; OnPropertyChanged(); } }
가 OnPropertyChanged
기능입니다 :
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
이 MVVM 자연해야 뭔가 상용구의 많은 것 같다
은 아래 이벤트 신호 코드입니다.
좀 더 간결하게하고 싶지만 어디서부터 시작해야할지 모르겠습니다.
위의 속성을 수신하는보기에서 getters와 setter는 어떻게 생겼을 까?
@HenkHolterman에 전적으로 동의합니다. INPC 구현을 기본 클래스로 옮길 수 있습니다. 다음은 이전에 사용한 작은 예제입니다. http://stackoverflow.com/questions/33801100/where-i-need-to-define-inotifypropertychanged-in-case-of-base-and-sub-classes/33805183# 33805183 – Ilan
먼저, derp ('PropertyChanged? .Invoke (...)')를 줄이는 언어 기능을 잊지 마라. 둘째, 타입 디스크립터를 사용하는 T4 템플릿의 보일러 플레이트로부터 이런 상황을 개선 할 수있는 많은 방법이있다. IDynamicMetaObjectProviders 등에서 POCO를 래핑하는 것입니다. – Will