2016-11-29 7 views
0

Caliburn.Microに問題があります:ShellView.xamlとShellViewModel.csがあり、新しいダイアログウィンドウ 'NewDialogViewを開きます。 xaml 'をShellViewModelから取得します。Caliburn.Micro:メインウィンドウから新しいウィンドウを開き、それをビューモデルに接続します。

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

internal class ShellViewModel 
{ 
    public void Click() 
    { 
     Window newDialogView = new NewDialogView(); 
     newDialogView.Show(); 
    } 
} 

ユーザーがその新しいウィンドウ内にあるときに、彼/彼女はボタンをクリックして、いくつかのメッセージを取得することができます:

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

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

問題がときということですユーザーはNewDialogView.xamlのボタンをクリックして何も起こりません。 'Hello'という内容のメッセージボックスはありません。助けてください!

+3

リファレンスWindowManager – mvermef

+0

私はそれを理解しました。ありがとう。 – Navuhodonosor

答えて

1

@mvermefが上記のコメントで言ったことを拡張するだけです。

ダイアログを表示するには、Caliburn Microのウィンドウマネージャを使用する必要があります。キャリバーンはその後、すべての配管をバックグラウンドで行うことができます。通常は、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()'はヌル化可能なブール値を返します(nullabool?hehe)。ブール値を本当に必要としたらどうしますか? 'bool result = this.windowManager.ShowDialog(newDialogViewModel)??偽; – Doom5

+1

@ Doom5 'result.GetValueOrDefault()'は何か似ていますが、少し面白いです。結果の宣言を修正しました。 –

+0

ニース。それは確かに、よりきついです。 – Doom5

関連する問題