WPF에서 MVVM(Model-View-ViewModel) 패턴은 코드와 UI를 명확히 분리하고 유지보수를 용이하게 하는 핵심 디자인 패턴으로 주로 사용한다.
MVVM은 WPF와 같은 데이터 바인딩 프레임워크에 최적화된 디자인 패턴으로, M(Model), V(View), VM(ViewModel)에 대하여 알아보자.
Model
View
ViewModel
ViewModelBase에 대하여 Script를 작성해보자
public abstract class ViewModelBase : INotifyPropertyChanged
{
// INotifyPropertyChanged의 요소
public event PropertyChangedEventHandler PropertyChanged;
// 속성값이 변화될 때 이 메서드를 '직접' 호출해줘야 한다.
private void NotifyPropertyChanged(string propertyName)
{
// PropertyChanged에 등록된 메서드들을 Invoke 해준다.
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
더 간단한 ViewModelBase
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
// 파생 클래스의 속성 setter에서 사용할 메서드
protected virtual bool SetProperty<T>(ref T member, T value, [CallerMemberName]string propertyName = null)
{
if (EqualityComparer<T>.Default.Equals(member, value)) return false;
member = value;
NotifyPropertyChanged(propertyName);
return true;
}
}