ファンシーなWPF MVVMウィンドウにSave & Close
とCancel & Close
のボタンがあるとします。MVVM:コードビハインドは悪いのか、それとも実用的なのか?
どうすればいいですか? MVVMはボタンをICommand
にバインドするよう指示し、制御の反転はView
があなたのViewModel
を知っているかもしれないが、それ以外の方法は知らないことを指示する。
View
購読へ
ViewModel
closingイベントを持って解決策を見つけたネットチャンスをうかがっ
:
private void OnLoaded(Object sender
, RoutedEventArgs e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing += OnViewModelClosing;
}
private void OnViewModelClosing(Object sender
, EventArgs<Result> e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing -= OnViewModelClosing;
DialogResult = (e.Value == Result.OK) ? true : false;
Close();
}
をしかし、それはコードビハインド私のこれまでのところ非常にうまく設計されたMVVMで混合されます。
別の問題は、メインウィンドウを表示したときにライセンス問題のメッセージボックスが表示されることです。再びWindow
を使用することができます。上記のようにLoaded
イベントが発生していますが、MVVMも壊れています。
これらのケースでは、賢明なやり方がありますか、またはペダンティックではなく、賢明でなければなりませんか?
それをしない「MVVMは、あなたがのICommandにボタンをバインドすることを指示し、」テストすることができ
mvvm!=コードビハインドなし。一方、パターンは私たちに役立ち、パターンを提供しません。 – Will