2016-10-14 5 views
0

WPF 페이지의 Loaded 이벤트에서 단추를 바인딩하면 다른 페이지로 이동 한 후 돌아갈 수 밖에없는 이유가 궁금합니다.ICommand가 MVVMLight 프레임 워크를 사용하여 Loaded 이벤트에 바인딩되지 않음

인벤토리 응용 프로그램이 있으며 기본 페이지에서 뒤로 이동 버튼이 특정 목록으로 돌아 가기 때문에 대부분의 ViewModel이 호출되며 그 원인은 해당 명령이 아닌 경우에도 바인딩을 시작합니다. 해당 페이지에 대한 콜렉션을로드하고 다른 페이지에 대한 콜렉션도로드합니다.

그래서로드 된 페이지 이벤트를 사용하여 목록을 채우고이 특정 페이지에 대한 바인딩 명령을 시작하는 데 필요한 메서드를 호출했습니다. 나 또한 일부 CRUD 이벤트의 구독을 취소하는 것과 같은 Unloaded 페이지 이벤트를 사용했습니다.

이제 문제는 단추가로드 된 페이지 이벤트에서 바인딩되지 않습니다. 나는 왜 그런지 모르겠다. ..

나는 문제를 데모하기 위해 소형 응용 프로그램을 만들었다. 귀하의 의견은 Command_ShowAddWindowCommand_ClickMe의 변화를 통지 받고 있지 않기 때문에 https://www.dropbox.com/s/qzumzyicuvrktsi/ICommandTest.zip?dl=0 enter image description here

답변

1

이는 (전체 소스 코드 포함) 여기 다운로드 할 수 있습니다. 설명해 드리죠 :

먼저 명령에 바인딩을 실행하여 Page 생성자는 초기화보기로 전송하지만,보기 null에 명령 '두 버튼을 결합 그래서 그 시간에 당신의 명령, null되어 있습니다

.

Loaded 이벤트가 발생하면 명령이 초기화되지만보기에 알림이 표시되지 않으므로 명령 바인딩이 null으로 유지됩니다. 당신이 그들을 초기화 할 때

수동에 대한 명령을 변경보기를 통보 RaisePropertyChanged 전화 :

문제에 대한 솔루션

void InitCommands() 
{ 
    Command_ShowAddWindow = new RelayCommand(Command_ShowAddWindow_Click); 
    Command_ClickMe = new RelayCommand(Command_ClickMe_Click); 
    RaisePropertyChanged("Command_ShowAddWindow"); 
    RaisePropertyChanged("Command_ClickMe"); 
} 

을 또는 당신은하기 전에의 ViewModel 생성자 에 명령을 초기화 데이터 바인딩이 초기화 됨 :

public ViewModel_Page1() 
{ 
    InitCommands(); 
    ... 
}