[C# - Prism] 프리즘 예제 11 - UsingDelegateCommandC#/Prism2023. 8. 5. 08:32
Table of Contents
안녕하세요, 반나무입니다.
이번 예제에서는 DelegateCommand를 사용하는 방법을 안내합니다.
MVVM 패턴을 사용하며 Prism을 사용하지 않을 때는 ICommand를 상속받은 Command를 제작해 버튼 클릭을 제어했었습니다. Prism에서는 해당 기능을 제공하고있습니다.
private bool _isEnabled;
public bool IsEnabled
{
get { return _isEnabled; }
set
{
SetProperty(ref _isEnabled, value);
// 해당 DelegateCommand의 CanExecute를 실행한다.
ExecuteDelegateCommand.RaiseCanExecuteChanged();
}
}
private string _updateText;
public string UpdateText
{
get { return _updateText; }
set { SetProperty(ref _updateText, value); }
}
public DelegateCommand ExecuteDelegateCommand { get; private set; }
public DelegateCommand<string> ExecuteGenericDelegateCommand { get; private set; }
public DelegateCommand DelegateCommandObservesProperty { get; private set; }
public DelegateCommand DelegateCommandObservesCanExecute { get; private set; }
public MainWindowViewModel()
{
// 아무 특수 기능 사용하지 않았지만 위쪽의 RaiseCanExecuteChanged() 때문에 IsEnabled가 변경될 때 CanExecute를 확인한다.
ExecuteDelegateCommand = new DelegateCommand(Execute, CanExecute);
// ObserversProperty()를 사용하면 RaiseCanExecuteChanged()와 같은 효과를 낼 수 있다. 여러 Property도 사용가능하다.
DelegateCommandObservesProperty = new DelegateCommand(Execute, CanExecute).ObservesProperty(() => IsEnabled);
// ObserversCanExecute()는 CanExecute를 함수로 두지않고 Property를 직접 받아 CanExcute로 사용한다.
// 1개만 사용 할 수있으며, bool 타입이여야한다.
DelegateCommandObservesCanExecute = new DelegateCommand(Execute).ObservesCanExecute(() => IsEnabled);
// View의 Parameter를 받아 온다.
ExecuteGenericDelegateCommand = new DelegateCommand<string>(ExecuteGeneric).ObservesCanExecute(() => IsEnabled);
}
private void Execute()
{
UpdateText = $"Updated: {DateTime.Now}";
}
private void ExecuteGeneric(string parameter)
{
UpdateText = parameter;
}
private bool CanExecute()
{
return IsEnabled;
}
저 중 자주 사용하는 DelegateCommand는 CanExecute를 사용하지 않는 기본 방식을 가장 많이 사용하고, 그 다음으로는 파라미터를 받는 DelegateCommand를 사용합니다. CanExecute는 뭔가 설정같은걸 만들때 빼고는 자주 사용되지는않는것 같습니다.
MVVM 패턴을 사용하며 많이 느끼는 불편함이 있다면 이것저것 작업하면서 부가적인 코드라인이 너무 길어지는 단점이 있는것 같습니다. 코드 라인을 줄이기위해 다양한 방법을 사용하는데, 화살표함수를 사용하면 아래와같이 DelegateCommand를 초기화할 수 있습니다.
public DelegateCommand ExampleCommand => new DelegateCommand(OnExample);
반응형
'C# > Prism' 카테고리의 다른 글
[C# - Prism] 프리즘 예제 13 - IActiveAwareCommands (0) | 2023.08.08 |
---|---|
[C# - Prism] 프리즘 예제 12 - UsingCompositeCommands (0) | 2023.08.06 |
[C# - Prism] 프리즘 예제 10 - CustomRegistrations (0) | 2023.07.26 |
[C# - Prism] 프리즘 예제 09 - ChangeConvention (0) | 2023.07.25 |
[C# - Prism] 프리즘 예제 08 - ViewModelLocator (0) | 2023.07.25 |
@반나무 :: 반나무_뿌리
3년차 WPF 개발자입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!