1

この架空の質問では、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設計の「典型的」ではないこと以外に、これが嫌われる理由はありますか? 私が知る限り、それはまだ正しいレベルの分離を維持しています.

4

1 に答える 1