Как управлять доступностью команд в различных ViewModel?

Рейтинг: 0Ответов: 2Опубликовано: 14.09.2014

Привет.

Как в MVVM управляют доступностью команд из различных ViewModel?

Допустим, создается динамическое меню в одной ViewModel_1. Элементы этого меню привязаны к командам, и стоит задача управлять включением (отключением) кнопок ToolBar из другой ViewModel_2 при нажатии на пункты меню ViewModel_1.

Ответы

▲ 1

Я использую mvvmlight framework, в котором есть класс RelayCommand, который может принимать в конструкторе только функцию-делегат или, в дополнение к ней, ещё и условие доступности. Рекомендую посмотреть документацию по этому фреймворку, потому как данный подход используется и в других...

▲ 1

Смотрите в сторону Messaging:

  1. Из привязанной в ViewModel_1 команде отправляете сообщение. Для MVVM Light это выглядело бы вот так:

    Messenger.Default.Send(new MenuItemClickedMessage());
  2. В ViewModel_2 регистрируете обработчик сообщения:

    Messenger.Default.Register(this, OnMenuItemClickedMessage_Received);

    в котором присваиваете false переменным класса через которые управляете доступностью Вашего Toolbar:

    public bool CanToolBarButtonClick()
    {
       return this.ToolBarButtonEnabled;
    }