Непонятное поведение WPF Шаблон MVVM
От: varenikAA  
Дата: 05.03.21 01:27
Оценка:
на главной форме такая кнопка
            <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 может там попроще вся эта лабуда работает.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 05.03.2021 3:21 Разраб . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.