на главной форме такая кнопка
<StackPanel
<Button
Command="{Binding ProcessingNewPacket}"
/>
по умолчанию она задисаблема ( ProcessingNewPacket = new Command(action, canExecute = () => AllowProcessingNewPacket); ) вычисляемым методом canExecute.
из другого потока вызываю обработчик события
//System.Windows.Application.Current.Dispatcher
dispatcher.Invoke(delegate
{
OnPropertyChanged(nameof(AllowProcessingNewPacket));
});
Кнопка должна активироваться, но она все равно серая, и только ткнув в какое-то поле или если окно было не видимо, т.е. ткнув в панели задач
кнопка активируется. при этом по серой кнопке если жамкнуть она естественно отработает.
Может кто знает как это лечится?
Выкрутился вот так:
//System.Windows.Application.Current.Dispatcher
dispatcher.Invoke(delegate
{
OnPropertyChanged(nameof(AllowProcessingNewPacket));
CommandManager.InvalidateRequerySuggested();
});
Но это капец, конечно! Вообще, Шаблон MVVM сильно переусложнен. Есть опыт Winforms и web(vuejs, svelte).
По ощущениям Winforms была лучшей технологией мс за последние 20 лет.
Вот только яп хилый слишком. нужны минимум макросы времени компиляции(АОП) для избавления от необходимости везде писать Inotify и try\catch\log.
ну рельно вот в свелте, все что в компоненте экспортируется при помощи мета автоматически слушается движком. и зачем так далеко разнесли окно и модель. в итоге вот такой кошмар приходится городить.
Надо глянуть avalonia может там попроще вся эта лабуда работает.