この架空の質問では、ViewModel が、View がサブスクライブするかなり複雑なイベントを発行するとします。ビューは、そのイベント内の状態に基づいて複数の画面要素を操作します。たとえば、いくつかのボタンを表示/非表示にしたり、有効/無効にしたり、ストーリーボードを開始したりすることができます。
// purely as an example:
public class SomeEvent
{
public bool ShouldShowAddButton { get; set; }
public bool ShouldShowDeleteButton { get; set; }
public bool AddButtonEnabled { get; set; }
public bool DeleteButtonEnabled { get; set; }
}
VM はビューについて何も知らないため、実際に到達してこれらのことを行うことはできず、代わりにイベントに依存します。標準的なMVVMの実践だと思います。(別のオプションは、これらの各アイテムを独自の公開イベントにして、次々に送信することです。)
しかし、VM がビューについて何も知らずにビューを呼び出すことができたらどうでしょうか?
public class MyViewModel
{
public Action OnShowAddButton { get; set; }
public Action OnShowDeleteButton { get; set; }
...etc
private void OnSomeStateChange()
{
// here, we'd normally publish the SomeEvent class
// instead, we could just call OnShowAddButton (or whatever) instead
}
}
public class MyView
{
public MyView()
{
this.myViewModel.OnShowAddButton = () => ...;
...etc
}
}
MVVM設計の「典型的」ではないこと以外に、これが嫌われる理由はありますか? 私が知る限り、それはまだ正しいレベルの分離を維持しています.