MVVM Light: RelayCommand: повторно использовать команду или создать новый экземпляр? - PullRequest
0 голосов
/ 08 августа 2010

При определении RelayCommand в ViewModel это обычно делается с использованием один раз [ленивый или в конструкторе] (см. здесь для примеров).

Но естьэто безопасно?Что, если несколько RelayCommands из одного и того же экземпляра поставлены в очередь (несколько нажатий на одну и ту же кнопку в графическом интерфейсе) и для первой команды « CanExecute » будет изменено на false, другие команды из очереди также будут отменены?Я могу представить, что это не правильное поведение?

Ответы [ 2 ]

2 голосов
/ 08 августа 2010

Ваше действие execute должно дважды проверить, может ли команда выполняться или нет. CanExecute - это подсказка для чего-либо связанного с командой, но ваша ViewModel не должна делать никаких предположений о том, как вызывается действие execute.

1 голос
/ 08 августа 2010

Несколько команд не будут поставлены в очередь.RelayCommand привязан к данным, поэтому он будет выполняться в потоке пользовательского интерфейса.Существует только один поток пользовательского интерфейса, поэтому один экземпляр RelayCommand должен завершить выполнение до того, как будет введен следующий щелчок.Если у вас есть длительные операции, вы обычно отключаете команду и вывод асинхронной операции или порождаете фоновое задание, а затем, когда пользовательский интерфейс освобождается, команда уже будет отключена до обработки следующего щелчка.

...