public event EventHandler? MyEvent; // 컴파일러가 add/remove를 자동 생성
public event EventHandler? CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; } // 커스텀 구독 로직
remove { CommandManager.RequerySuggested -= value; } // 커스텀 해제 로직
}
이 구조를 Event Forwarding이라고 한다.
// 1. RelayCommand가 가진 이벤트
public event EventHandler? CanExecuteChanged
{
// 2. WPF CommandManager가 가진 전역 이벤트 (WPF 내부)
// CommandManager.RequerySuggested는 특정 조건이 발생할 때마다 자동으로 발생
// Command들아, CanExecute 상태를 다시 확인해봐!!
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
쉽게 말해서 한번 이벤트를 발생시키면(RaiseCanExecuteChanged) 그 이벤트에 구독된 이벤트 헨들러들을 전부 호출해주는 역할인데
CanExecuteChanged이벤트에 핸들러를 구독하면 실제로는 CommandManager.RequerySuggested에 이벤트 헨들러들을 구독되는 방식이다.
CanExecuteChanged는 이벤트가 맞지만, 실제로 "발생" 하는것은 아니고, 단순히 "중계"만 하는 역할.
WPF가 자동으로: