본문 바로가기

개발자국/WPF / Expression

[WPF] Window Loaded Event in MVVM

 

MVVM Model로 간단하게 코드를 작성하다 보면 다음과 같이 Behind 코드에서

ViewModel을 가져오는 경우가 있다.

 

this.DataContext = new MinsuViewModel();

자, 오늘은 이놈이 말썽을 일으키셨다!!

   1: public partial class MainWindow : Window
   2: {
   3:     public MainWindow()
   4:     {
   5:         InitializeComponent();
   6:         this.DataContext = new MinsuViewModel();
   7:     }
   8: }

요놈이 무슨 문제가 있을까.....

 

곰.....곰......곰........문.......문......... 곰이 꺼꾸로 자뻐지도록 생각을 해봤다.

왜!?

  1: <i:Interaction.Triggers>
  2:     <i:EventTrigger EventName="Loaded">
  3:         <my:EventToCommand Command="{Binding WindowsLoaded}"></my:EventToCommand>
  4:     </i:EventTrigger>
  5: </i:Interaction.Triggers>

 

요 인터렉션 트리거가 들어오질 않는다!!??

도대체 왜!!

 

Handler 등록도 확인해보고, Relay Command도 확인해보고,

 

  1:         <Button>
  2:             <i:Interaction.Triggers>
  3:                 <i:EventTrigger EventName="Click">
  4:                     <my:EventToCommand Command="{Binding WindowsLoaded}"></my:EventToCommand>
  5:                 </i:EventTrigger>
  6:             </i:Interaction.Triggers>
  7:         </Button>

 

헐.... 근대 이렇게 한 놈은 들어온다!?

 

이게 무슨 일인고 생각해 보니....

 

가장 처음에 올린 소스부터가 문제였구만...

 

  1:     public partial class MainWindow : Window
  2:     {
  3:         public MainWindow()
  4:         {
  5:             InitializeComponent();
  6:             this.DataContext = new MinsuViewModel();
  7:         }
  8:     }
 
InitializeComponent();   // 자... 이놈이 Window의 Load를 담당하고 있다..
this.DataContext = new MinsuViewModel(); // 그러고 나서 DataContext에 바인딩을 걸었다!!?
 
응?!
 
시부엉....
Window Load 다 되고 나서, Command를 Relay 하고, 바인딩 하고 난리 부루쓰를 춰 봐야..
 
Loaded Event는 천년전에 이루어진 일이거늘....
 
오늘도 삽질끝에 하나 배워가는구나..