Распространенное недоразумение с MVVM заключается в том, что в представлении никогда не может быть когда-либо кода. Это просто неправда.
Цель MVVM состоит в том, чтобы минимизировать код в выделенном фрагменте кода, но для вещей, которые непосредственно взаимодействуют с самим представлением (например, события Windows), допустимо поместить в некоторый код позади . Выделенный код обрабатывает Cancel и может свести к минимуму или вызвать команду во ViewModel или что-то подобное.
В противном случае вам придётся придумать сложную систему обработки события в ViewModel, которая нарушает шаблон MVVM, поскольку ViewModel имеет ссылку на View (а не наоборот).