2011-06-20 20 views
1

私はWPF、XAML、およびデータバインディングが比較的新しいです。私はビュー(ウィンドウ)とビューモデルを持っています。ビューのDialogResultをViewModelsプロパティにバインドしますか?

MVVMパターンを実装しようとしました。これは、ビューもビューモデルも互いに参照を保持しないことを意味します。すべてのデータ交換はデータバインディングを介して行われます。

これまでのところ良いことだが、今私は解決策を見つけることができない問題にぶつかった。

私の見解では、コマンドにバインドされたボタンStartがあります。

<Button Command="{Binding NextCommand}" Content="Next"> 

NextCommandは、私の場合はタイプActionCommand : ICommand

であるNextCommand単にビュー、モデル内のプライベートメソッドを呼び出します。

私がこれまでに解決策を見つけることができない問題は、次のとおりです。

ビューモデルNextCommandAction方法の最後にウィンドウを閉じるには、どのように?

private void NextCommandAction(object o) 
{ 
    ... 
    ... 
    // close the window 
} 

私はちょうどDialogResult = true;

私がこれまでに発見した唯一の作業溶液は、ビューに隠されたラジオボタンを追加します、それをバインドすることを設定することはできませんビューへの参照を持っていないので、値をプロパティCloseViewに追加し、非表示のラジオボタンのCheckedイベントにバインドされているxaml.csファイル内のメソッドCloseViewを作成します。そのメソッド内でDialogResult = trueを設定します。

これは機能しますが、私はあなたのビューに隠し要素を追加するよりも優れた解決策が必要だと思います!

ご協力いただきありがとうございます。

PS:私の質問は明らかです。何か不明な点がある場合はお気軽にお問い合わせください。

答えて

1

CommandParameterとしてウィンドウ参照をCloseコマンドに渡し、ウィンドウ上で必要な操作を行うことができます。

<Button Content="Close" Command="{Binding Path=CloseCommand}" 
    CommandParameter="{Binding ElementName=Window}"/> 

private void CloseCommand(object sender) 
{ 
    Window wnd = sender as Window; 
    wnd.Close(); 
} 
0

CommandParameter = "{Binding ElementName = Window}"は、XAMLに "Window"という名前の要素があることを前提としています。たとえば、Windowタグには 'Name = "Window"'が必要です。

関連する問題