2016-11-29 15 views
0

Caliburn.Micro에 문제가 있습니다. ShellView.xaml 및 ShellViewModel.cs가 있는데 새 대화 상자 창 'NewDialogView'를 열고 싶습니다. xaml 'ShellViewModel에서. 문제는 때이다Caliburn.Micro : 주 창에서 새 창을 연 다음 뷰 모델에 연결

<StackPanel> 
    <Button x:Name="ShowMessage" 
      Content="Click" 
      /> 
</StackPanel> 

internal class NewDialogViewModel 
{ 
    public void ShowMessage() 
    { 
     MessageBox.Show("Hello!"); 
    } 
} 

: 사용자가 새 창에있을 때

<StackPanel> 
    <Button x:Name="Click" 
      Content="Click" 
      /> 
</StackPanel> 

internal class ShellViewModel 
{ 
    public void Click() 
    { 
     Window newDialogView = new NewDialogView(); 
     newDialogView.Show(); 
    } 
} 
그런 다음, 그/그녀는 어떤 메시지를 버튼을 클릭하고 얻을 수 있습니다 NewDialogView.xaml의 버튼을 클릭하면 아무 일도 일어나지 않습니다. 'Hello'라는 내용의 메시지 상자가 없습니다. 도와주세요!

+3

참조 WindowManager – mvermef

+0

알아 냈습니다. 감사. – Navuhodonosor

답변

1

위의 설명에서 @mvermef가 말한 것을 확장하면됩니다.

대화 상자를 표시하려면 Caliburn Micro의 창 관리자를 사용해야합니다. Caliburn은 백그라운드에서 모든 배관 작업을 수행 할 수 있습니다. 일반적으로 Caliburn 부트 스트 래퍼를 사용하여 창 관리자로 ShellViewModel을 만듭니다.

internal class ShellViewModel 
{ 
    public ShellViewModel(IWindowManager theWindowManager) 
    { 
     this.windowManager = theWindowManager; 
    } 

    public void Click() 
    { 
     // Assumes that there is a NewDialogView... 
     var newDialogViewModel = new NewDialogViewModel(); 
     bool? result = this.windowManager.ShowDialog(newDialogViewModel); 
     // result is true if user pressed ok button... 
    } 
} 
+0

하지만'WindowManager.ShowDialog()'는 nullable boolean을 반환합니다 (nullabool? hehe). 내가 진정으로 부울을 원한다면'bool result = this.windowManager.ShowDialog (newDialogViewModel) ?? 거짓; – Doom5

+1

@ Doom5'result.GetValueOrDefault()'는 비슷한 것을 이루지 만 IMHO는 약간 깔끔합니다. 결과 선언을 수정했습니다. –

+0

니스. 참으로 경쾌합니다. – Doom5