В некоторых примерах создается статический класс «ApplicationCommands», и экземпляру каждой команды назначается статическое свойство этого класса
Это делается для команд, которые вы хотитебыть в состоянии получить доступ из любого места.Например, если вы хотите, чтобы при связывании клавиш F1 всегда отображался экран справки, эта команда была бы реализована в одном глобально доступном месте, а затем привязывалась к нему с различных экранов.
видимые команды, установленные как свойства ViewModel и других окон самого View / Window.
Если команда что-то делает с данными, то ViewModel - хорошее местодля этого.Если команде не нужно ничего делать с данными, поместите ее в код позади View (поскольку она не имеет ничего общего с ViewModel и вам не нужно загрязнять ViewModel этим).Интересный случай, когда вы делаете что-то вроде всплывающего диалогового окна в ответ на нажатие клавиши, и вам нужно передать текущий выбранный элемент сетки в диалоговое окно - куда должна идти команда?В этом случае я бы поместил его в код за представлением, поскольку нет веской причины помещать его во ViewModel - выбранный элемент может быть извлечен из ViewModel представлением, если необходимо.
Много разЯ видел команды, которые без нужды вводили в ViewModel просто потому, что люди думали, что это единственный способ сделать это.Эмпирическое правило, которое я использую: если оно выполняет работу, связанную с пользовательским интерфейсом, оно входит в код позади представления.Если он выполняет работу с данными, он может перейти в ViewModel.Если он делает смесь, то рассмотрите возможность разделения функциональности как по View, так и по ViewModel.
Какой из этих компонентов команда должна знать и / или манипулировать?
Только те, о которых он должен знать.Доступ к таким компонентам, как Модель, из ViewModel должен осуществляться через правильно определенное свойство или функцию, которая возвращает интерфейс, чтобы избежать тесной связи.
Если он вызывает некоторый метод Модели, который затемпередает изменения обратно в View Model / View?
Нет проблем с командой доступа к модели из ViewModel.Команда может обновить свойства в ViewModel или Model, и с помощью магии привязки данных и уведомлений о свойствах эти обновления могут быть отражены обратно в пользовательском интерфейсе.