반응형
해당 포스팅은 개인적으로 C# WPF를 공부하면서 익힌 내용을 기억에 남기기 위한 작업의 일환으로 작성된 글로서
일부 내용에 오류가 있을 수도 있으니 참고하시기 바랍니다.
C#WPF 프로그래밍을 할때,RelayCommand를
정의해주고 UI에서 만든 Button과 연결하여
사용하는 경우가 많은데,
그러한 RelayCommand에서
사용하는 함수에 대해
알아보자.
내용 요약
C# WPF의 RelayCommand
에서 자주 사용하는 Delegate, Action, Func에 대해 설명하겠습니다. 이 개념들은 WPF에서 MVVM 패턴을 구현할 때 중요하게 사용됩니다.
목차
1.Delegate
2.Action
3.Func
4.RelayCommand에서 Action과 Func의 역할
5.RelayCommand 사용 예시
1. Delegate (델리게이트)
Delegate는 C#에서 메서드를 참조하는 형식입니다. 특정 메서드의 참조를 저장하고 그 메서드를 나중에 호출할 수 있습니다. 덕분에 메서드를 변수처럼 다룰 수 있으며, 메서드를 인수로 전달하거나 이벤트 핸들링에서 사용됩니다.
// Delegate 선언
public delegate void MyDelegate(string message);
// Delegate 사용 예시
public class MyClass
{
public void PrintMessage(string message)
{
Console.WriteLine(message);
}
}
MyDelegate del = new MyClass().PrintMessage;
del("Hello, Delegate!"); // 출력: Hello, Delegate!
2. Action
Action은 리턴값이 없는 메서드를 참조하는 델리게이트입니다.
여러 개의 매개변수를 받을 수 있지만
리턴 타입이 void
라는 특징이 있습니다.
// 매개변수 없는 Action 예시
Action action = () => Console.WriteLine("No parameters");
action(); // 출력: No parameters
// 매개변수 있는 Action 예시
Action<int, string> action = (x, y) => Console.WriteLine($"{x}, {y}");
action(5, "Hello"); // 출력: 5, Hello
3. Func
Func은 리턴값이 있는 메서드를 참조하는 델리게이트입니다.
마지막 매개변수가 리턴 타입을 나타내며,
0개 이상의 매개변수를 받을 수 있습니다.
// 리턴값 있는 Func 예시
Func<int> getNumber = () => 42;
int result = getNumber(); // 결과: 42
Func<int, int, int> addNumbers = (a, b) => a + b;
int sum = addNumbers(5, 3); // 결과: 8
4. RelayCommand에서 Action과 Func의 역할
RelayCommand
는 WPF에서 MVVM 패턴을 구현할 때
버튼 클릭 등의 UI 동작을 처리하기 위해 사용됩니다.
Action
과 Func
는 RelayCommand 내부에서
명령 실행 로직과 실행 가능 여부를
결정하는 함수로 사용됩니다.
public class RelayCommand : ICommand
{
private readonly Action _execute; // 명령 실행
private readonly Func<bool> _canExecute; // 실행 가능 여부 판단
public RelayCommand(Action execute, Func<bool> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute == null || _canExecute();
}
public void Execute(object parameter)
{
_execute();
}
}
1. Action _execute
_execute
는 실제 명령을 실행하는 코드 블록을 참조하며,
사용자 동작(예: 버튼 클릭)을 수행할 때
실행할 동작을 정의합니다.
2. Func<bool> _canExecute
_canExecute
는 명령이 실행 가능한지 여부를 판단하는 함수로, bool
값을 반환합니다.
5. RelayCommand 사용 예시
public class MainViewModel
{
public RelayCommand GeneratePostCommand { get; }
public RelayCommand PostToNaverCommand { get; }
public MainViewModel()
{
// Action을 통한 명령 실행 메서드
GeneratePostCommand = new RelayCommand(GeneratePost);
// Func<bool>을 통한 조건 추가
PostToNaverCommand = new RelayCommand(PostToNaver, CanPostToNaver);
}
private void GeneratePost()
{
Console.WriteLine("Generating Post...");
}
private void PostToNaver()
{
Console.WriteLine("Posting to Naver...");
}
private bool CanPostToNaver()
{
return !string.IsNullOrEmpty(GeneratedPost);
}
}
내용 정리
- Delegate: C#에서 메서드를 참조하는 형식으로, 메서드를 변수처럼 사용할 수 있도록 합니다.
- Action: 반환값이 없는 메서드를 참조하는 델리게이트입니다.
- Func: 반환값이 있는 메서드를 참조하는 델리게이트로, 마지막 매개변수로 반환 타입을 설정합니다.
- RelayCommand: WPF에서 MVVM 패턴을 구현할 때 사용되며,
Action
을 통해 명령을 실행하고,Func<bool>
을 통해 실행 조건을 지정합니다.
이 개념을 이해하면 WPF에서 MVVM 패턴의 명령 시스템을 보다 효율적으로 구현할 수 있습니다.
반응형
'프로그래밍 > C# (WPF)' 카테고리의 다른 글
C# WPF에서 Grid내에 Row/Column을 자동 Align하는 방법에 대하여 (7) | 2024.11.11 |
---|---|
C# WPF에서 터널링(Tunneling)과 버블링(Bubbling) 이벤트에 대하여 (0) | 2024.11.08 |
C# WPF에서 필드(field)와 속성(property)에 대해 알아보고 get/set 개념 이해하기 (2) | 2024.10.12 |
C# WPF에 Style과 Trigger 설명 추가 (4) | 2024.10.09 |
C# WPF에서 Property Trigger 이해하기 (1) | 2024.10.09 |