Бьюсь об заклад, на это уже много раз отвечали, но ...
Для простой ситуации, когда для кнопки в UserControl свойство команды имеет значение, аналогичное Find (ApplicationCommands.Find), как ViewModel будет обрабатывать эту команду? Я обычно вижу обработчики команд, связанные с CommandBinding, который добавляется в коллекцию CommandBindings на UIElement, но мой ViewModel не является производным от UIElement (не так ли?). Сами команды не отображают события, чтобы уведомлять о том, когда они были выполнены, так где я должен подключиться, чтобы получить эту информацию?
РЕДАКТИРОВАТЬ: Я хотел бы использовать стандартный WPF для решения проблемы, если это возможно. Я знаю, что есть много доступных фреймворков для такого рода вещей, но хотел бы сохранить код простым.
EDIT2: включая пример кода.
<UserControl>
<UserControl.DataContext>
<local:MyViewModel/>
</UserControl.DataContext>
<Button Command="Find"/>
</UserControl>
Где:
class MyViewModel
{
// Handle commands from the view here.
}
Я мог бы добавить CommandBinding к UserControl, который будет обрабатывать Executed, а затем вызвать гипотетический метод Find в MyViewModel, который выполняет реальную работу, но это лишний и ненужный код. Я бы предпочел, чтобы сама ViewModel обрабатывала команду Find. Одним из возможных решений было бы получение MyViewModel из UIElement, однако это кажется противоречивым.