Подтвердить что ты не робот

Что заменяет CommandManager в WinRT?

Я начинаю работу с приложениями в стиле Metro (я знаю, что мы не должны называть его Metro, но я никогда не могу вспомнить, что он должен был назвать...), и я реализую DelegateCommand класс для использования в MVVM. В WPF событие ICommand.CanExecuteChanged обычно выполняется следующим образом:

    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

Но класс CommandManager не существует в WinRT... Есть ли что-то другое? Или мы должны явно инициировать это событие сами?

4b9b3361

Ответ 1

В WinRT вы должны вручную обновить/поднять CanExecuteChanged. Командующему CommandManager не нужно делать это глобально. Вы можете рассматривать это как боль в шее или серьезное повышение производительности, когда CanExecute не вызывается постоянно. Это означает, что вам нужно подумать о каскадных изменениях свойств, где раньше вам не приходилось. Но так оно и есть. Руководство.

public void RaiseCanExecuteChanged()
{
    if (CanExecuteChanged != null)
        CanExecuteChanged(this, EventArgs.Empty);
}

Ответ 2

С WPF необходимо, чтобы вы реализовали ICommand.CanExecuteChanged, как вы описали. Однако для Silverlight это не так. См. Этот связанный вопрос:

привязка WPF CommandParameter не обновляется

Я предполагаю, что в WinRT, как и в Silverlight, CommandManager не требуется.

См. соответствующую дискуссию здесь:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/477cdd19-ee88-4746-97fe-59b8dbd44e0a/