ViewModelBase 클래스와 RelayCommand 클래스는 MVVM 패턴을 구현할 때 자주 사용되는 유용한 클래스들이다. 이들을 사용하면 코드를 더 간결하고 효율적으로 작성할 수 있다.
INotifyPropertyChanged 인터페이스 구현: ViewModelBase 클래스는 INotifyPropertyChanged 인터페이스를 구현하여 ViewModel의 속성 값이 변경될 때 View에 알림을 전달하는 역할을 한다. 이를 통해 View는 ViewModel의 변경 사항을 자동으로 반영하여 UI를 업데이트할 수 있다.ViewModelBase 클래스는 OnPropertyChanged() 메서드를 제공하여 속성 변경 알림을 발생시킨다. ViewModel에서 속성 값을 변경할 때마다 OnPropertyChanged() 메서드를 호출하면 View에 변경 사항이 전달된다.ViewModelBase 클래스를 사용하면 모든 ViewModel에서 INotifyPropertyChanged 인터페이스를 구현하고 OnPropertyChanged() 메서드를 작성해야 하는 번거로움을 줄일 수 있다.ICommand 인터페이스 구현: RelayCommand 클래스는 ICommand 인터페이스를 구현하여 View에서 ViewModel의 메서드를 실행할 수 있도록 하는 Command를 구현하는 역할을 한다.RelayCommand 객체를 생성할 때 ViewModel의 메서드를 인자로 전달하면, View에서 해당 Command를 실행할 때 전달된 메서드가 호출된다.RelayCommand는 CanExecute() 메서드를 통해 Command 실행 가능 여부를 제어할 수 있다. 예를 들어, 특정 조건을 만족해야만 버튼이 활성화되도록 할 수 있다.RelayCommand 클래스를 사용하면 View에서 이벤트 핸들러를 작성하지 않고도 ViewModel의 메서드를 직접 실행할 수 있어 코드가 간결해진다.ViewModelBase 클래스는 INotifyPropertyChanged 인터페이스를 구현하여 ViewModel의 속성 변경 알림을 View에 전달하는 역할을 한다.RelayCommand 클래스는 ICommand 인터페이스를 구현하여 View에서 ViewModel의 메서드를 실행할 수 있도록 하는 Command를 구현하는 역할을 한다.ViewModelBase 클래스를 상속받습니다.OnPropertyChanged() 메서드를 호출하여 View에 변경 사항을 알립니다.RelayCommand 객체를 생성하고, 실행할 메서드를 인자로 전달합니다.RelayCommand 객체를 컨트롤 (예: Button)의 Command 속성에 바인딩합니다.// ViewModel
public class MyViewModel : ViewModelBase
{
private string _myText;
public string MyText
{
get { return _myText; }
set
{
_myText = value;
OnPropertyChanged();
}
}
public ICommand MyCommand { get; private set; }
public MyViewModel()
{
MyCommand = new RelayCommand(ExecuteMyCommand);
}
private void ExecuteMyCommand()
{
// Command 실행 시 수행할 작업
MyText = "Command Executed!";
}
}
// View
<Button Content="Execute Command" Command="{Binding MyCommand}" />
앞에서 설명한 것처럼 ViewModelBase 클래스와 RelayCommand 클래스를 직접 구현하는 대신 사용할 수 있는 방법이 있다. .NET Community Toolkit MVVM 라이브러리 또는 다른 MVVM 프레임워크를 활용하면 MVVM 패턴을 더욱 쉽고 효율적으로 적용할 수 있다.
.NET Community Toolkit은 MVVM 패턴 구현을 위한 다양한 유틸리티를 제공하는 라이브러리다. 이 라이브러리에는 ObservableObject 클래스와 RelayCommand 클래스가 포함되어 있어, ViewModelBase 클래스와 RelayCommand 클래스를 직접 구현하지 않고도 MVVM 패턴을 쉽게 적용할 수 있다.
INotifyPropertyChanged 인터페이스를 구현한 클래스이다.ObservableObject 클래스를 상속받으면 속성 변경 알림을 자동으로 처리할 수 있다.[ObservableProperty] 어트리뷰트를 사용하여 속성을 정의하면, 속성 변경 이벤트를 자동으로 발생시키는 코드가 생성된다.ICommand 인터페이스를 구현한 클래스이다.[RelayCommand] 어트리뷰트를 사용하여 메서드를 Command로 변환할 수 있다.CanExecute 메서드를 지정하여 Command 실행 가능 여부를 제어할 수 있다.CommunityToolkit.Mvvm 패키지를 설치한다.ObservableObject 클래스를 상속받는다.[ObservableProperty] 어트리뷰트를 사용하여 속성을 정의한다.[RelayCommand] 어트리뷰트를 사용하여 메서드를 Command로 변환한다.using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
public class MyViewModel : ObservableObject
{
[ObservableProperty]
private string _myText;
[RelayCommand]
private void ExecuteMyCommand()
{
MyText = "Command Executed!";
}
}
.NET Community Toolkit MVVM 외에도 Prism, MVVM Light, Caliburn.Micro 등 다양한 MVVM 프레임워크가 있다. 이러한 프레임워크들은 ViewModelBase 클래스, RelayCommand 클래스, 의존성 주입, 메시징 등 MVVM 패턴 구현을 위한 다양한 기능을 제공한다.
CommunityToolkit.Mvvm
https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/