[WPF 부록] Event Forwarding

soonwoo·2025년 9월 11일

WPF

목록 보기
5/5
post-thumbnail
  1. 일반적인 이벤트(자동구현)
public event EventHandler? MyEvent; // 컴파일러가 add/remove를 자동 생성
  1. 커스텀 이벤트(수동구현)
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가 자동으로:

  • 텍스트박스 내용 변경 감지 → 모든 Command.CanExecute 재검사
  • 리스트 선택 변경 감지 → 모든 Command.CanExecute 재검사
    개발자는 아무것도 안 해도 됨!

0개의 댓글