Здравствуйте, varenikAA, Вы писали:
AA>самопальный System.Windows.Input.ICommand без излишних наворотов.
Т.е. свой самопал работает как надо, и только MVVM во всём виноват
На самом деле, для полного феншуя должны быть две вещи:
* валидатор canExecute
* событие "что-то поменялось, надо перевалидировать canExecute"
Ведь не смущает в winforms, что в случае изменения контента окна надо позвать InvalidateRect или что-то аналогичное дабы насильно вызвать перерисовку? Так и здесь: кнопка отрисована, статус при этом проверили — получили canExecute==false, нарисовали сереньким (или какой там шаблон для disabled-состояния сейчас задан у кнопки). Если после этого что-то поменялось в модели/вьюмодели и выражение canExecute может вычислиться как true, как кнопка про это узнает? Никак.
В уже упомянутом в предыдущих постах RelayCommand всё это есть из коробки, дёргаем метод RaiseCanExecuteChanged — и готово.