1

私は、WPF、XAML、およびデータバインディングに比較的慣れていません。ビュー(ウィンドウ)とビューモデルがあります。

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

これまでのところ良いのですが、今は解決策が見つからない問題に遭遇しました。

私の見解では、コマンドにバインドされている[開始]ボタンがあります。

<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を設定しました。

これは機能しますが、ビューに非表示の要素を追加するよりも優れた解決策が必要だと思います。

4

4 に答える 4

0

ウィンドウ参照を 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();
}
于 2014-10-06T06:14:41.157 に答える