Заморочка интересная с WPF binding
Для демки, конечно никакой разницы.
Ну так об этом и речь.
Обычно такPropertyChanged();
Раньше было такPropertyChanged(nameof(Person));
В разных расширениях может быть еще встроенная проверка на ==, соответсвенно количество аргументов чуть больше
Это все мило, но не имеет никакого отношения к заданному вопросу.
UI обновляется проверти после вызова эвента PropertyChanged. Обновилось там значение или нет - не важно, геттер будет вызван.
Код OnPropertyChanged moose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на null и дергать PropertyChanged только если предыдущее значение было null, а потом удивляться, почему оно так работает
Левый alt = Alt Правый alt = ALT
-----
Ты не совсем прав.
Скан-код будет один и тот же, но префикс будет другим.
https://docs.microsoft.com/en-us/windows/win32/api/winuser...
Чтобы работал при любой последовательности нажатий.
-----
Там нет последовательности.
Там есть информация об состоянии служебных (шифт, альт, контрол) клавиш на момент нажатия альфа-цифрo-буквы.
Это все мило, но не имеет никакого отношения к заданному вопросу.UI обновляется проверти после вызова эвента PropertyChanged. Обновилось там значение или нет - не важно, геттер будет вызван.Код OnPropertyChangedmoose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на null и дергать PropertyChanged только если предыдущее значение было null, а потом удивляться, почему оно так работает
Уже давно надо было перейти с WPF на HTML... а не париться с десктопным приложением. Когда я в колледже учился, нам вбивали в голову про кроссплатформенность, WPF не является такой, например они сами от Silverlight отказались https://ru.wikipedia.org/wiki/Microsoft_Silverlight.
В 2012 году Microsoft назначила конец жизненного цикла Silverlight 5 на 10 декабря 2021 года. В 2013 году Microsoft объявила, что они прекратили развитие Silverlight, за исключением выпуска исправлений ошибок. Silverlight более не поддерживается в браузерах Opera, Mozilla Firefox, Google Chrome, так как в 2015 году в этих браузерах была отключена по умолчанию или полностью прекращена поддержка плагинов формата NPAPI.
P.S.:У WPF её нисша это визуализация данных, а не работа с формами, и больше подходит для HMI/SCADA, а не как типичное десктопное приложение. Мне один умный дотнетчик сказал, чтобы я на HTML5 переходил, хотя он большой фанат C#/.NET.
Скан-код будет один и тот же, но префикс будет другим.
Это если в консоли постоянно опрашивать всё.
Здесь же речь идет конкретно об этом:
EventManager.RegisterClassHandler(typeof(Window), System.Windows.Controls.Control.KeyDownEvent, new KeyEventHandler(OnKeyDown), true) private void OnKeyDown(object sender, KeyEventArgs e) { ... }
То бишь мы получаем исключительно KeyDown события и не хотим сканировать KeyStates ,а хотим пользовать e.Key с каким то флагом
Можешь с ехе поиграться. Там в первой строке e.Key, а затем коды нажатых клавиш из отсканированных KeyStates
Код OnPropertyChangedmoose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на null и дергать PropertyChanged только если предыдущее значение было null, а потом удивляться, почему оно так работает
мы еще не видали, но осуждаем : )
... не обижался? который из них?
Тут написано https://ru.wikipedia.org/wiki/Windows_Presentation_Foundat...:
Windows Presentation Foundation (WPF) — аналог WinForms, система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), использующая язык XAML.
Допустим захотят отказаться от WPF или от NET, эти знания уже будут бесполезными, и всё прийдётся переучивать с нуля.
Уже давно надо было перейти с WPF на HTML... а не париться с десктопным приложением.
Почему? Ведь если ты делаешь десктопное приложение, то WPF как раз то, что доктор прописал :)
Когда я в колледже учился, нам вбивали в голову про кроссплатформенность
Кроссплатформенность нужно далеко не всем. Более того, в большинстве случаев она не нужна.
например они сами от Silverlight отказались
Технология не выдержала конкуренции и умерла. Ничего необычного в этом нет.
Мне один умный дотнетчик сказал, чтобы я на HTML5 переходил, хотя он большой фанат C#/.NET.Мне кажется, что у каждой технологии есть свое преминение. Я не вижу смысла переходить на HTML в десктопном прилежении.
в этом же контроле имеются и другие DependencyProperties, которые типа примитивов: строки, целые ... некоторые я использую просто чтобы "передать сообщение" контролу. само проперти у объекта DataContext просто всегда возвращает одно и то же значение, просто пишу OnPropertyChanged ("blablabla");, и в PropertyChangedCallback юзэрконтрола делаю что надо по этому событию.
это я написал? это - брэхня! странно, что уважаемое комъюнити не возразило. я уже не могу знать, почему я так решил, видимо, на тот момент было что-то, что такое впечатление создало. это - тоже не работает, как я ожидал.
видимо, где-то "в междуящичном пространстве" происходит какая-то оптимизация, и если гэттэр возвращает то же значение, что уже стоит в контроле, его PropertyChangedCallback не вызывается. единственный выход - передавать каждый раз значение отличное от предыдущего.
вообще, повторю, мне не нравится как я сделал дезигн. мне нужно, чтобы контрол реагировал на события, при этом выполнял некоторые действия, связанные с новым значением (свойствами) некого объекта. ДАЖЕ ЕСЛИ ОБЪЕКТ НЕ ИЗВЕНИЛСЯ! решил воспользоваться байндингом, дабы не нарушать святых принципов mvvm/ но вот получается такая штука как описываю. можно, конечно, чтобы адаптер бросал событие, на которое контрол бы подписался, но это некошер. как еще юзырь-контрол завтавить на что-то отреагировать, используя какие-то данные?
пока оставляю все как есть. естественно, каждый раз беспокоясь о том, чтобы был новый объект.
Это если в консоли постоянно опрашивать всё.
-----
Это при каждом нажатии.
Опрашивать - можно, но не нужно - все и так будет.
Если мало того что идет в данных евента - можно взять что-то что мелкомягкие делали для игрушек - там точно отслеживаются все изменения состояния клавиатуры.
хотим пользовать e.Key с
-----
Не помню что есть в этих эвентах - давно не работал с клавой на этом уровне.
Возможно, что что-то обрезали, но скорее всего где-то что-то оставили... возможно - неявное, недокументированноe...
но скорее всего где-то что-то оставили... возможно - неявное, недокументированноe...
Тебе дать простейшие исходники поиграться?
Нормальные данные нашел только в "массиве состояния" клавиш.
Что то типа "буква"+состояние дополнительных клавиш, не нашел. Да и не должно вроде быть, а то что делать с контрол/стрелка, алт/капс лоск и т.п.
связанные с новым значением (свойствами) некого объекта. ДАЖЕ ЕСЛИ ОБЪЕКТ НЕ ИЗМЕНИЛСЯ!
если у объекта имеется новое значение, то объект вообще то изменился.
Можно ли нормальное описание задачи написать? Наверняка народ чего-то придумает.
мне нужно, чтобы контрол реагировал на события
Зависит еще и от того как будет использоваться контрол, в простейшем случае можно сделать всё через его ViewModel.
Можно еще сделать дополнительный объект "События" и через него всё передавать.
Зависит еще и от того как будет использоваться контрол, в простейшем случае можно сделать всё через его ViewModel.
наверное, это если не оптимальное решение, то очень к нему близко. попробую перелопатить завтра. возможно, кое-какие побочные ляпы исчезнут.
Можно еще сделать дополнительный объект "События" и через него всё передавать.
можно, но для этого контрол должен знать о том классе, который является паблишером, чтобы иметь возможность подписаться. а это - полный некошер.
Почему? Ведь если ты делаешь десктопное приложение, то WPF как раз то, что доктор прописал :)
По многим причинам, по моему мнению WPF медленнее работает, чем допустим WinForms, т.к. в WPF используется DirectX и GDI+, не зря ведь Murr выберает хороший себе компьютер. Я думаю задачу ТС на WinForms можно было сделать в два счёта.
Кроссплатформенность нужно далеко не всем. Более того, в большинстве случаев она не нужна.
С вами не согласен, это вообще-то то, что мы в самом начале учебного года учили, когда я поступил только в колледж, про кроссплатформенность наверное нам семестр рассказывали, если сюда гляните https://sourceforge.net/directory/os:windows/ там слева сверху где OS, там первые три чек-бокса это Windows, Linux, MacOS. А в этой статистики https://gs.statcounter.com/os-market-share Android стоит впереди, за ним Windows и iOS.
Технология не выдержала конкуренции и умерла. Ничего необычного в этом нет.
А кто конкурент? Они просто не смогли портировать на все устройства, а на смартфоне Silverlight хорошо кушает аккумулятор.
Я не вижу смысла переходить на HTML в десктопном прилежении.
Ну меньше возьни, а UI более привлектелен чем у WPF.
Я не вижу смысла переходить на HTML в десктопном прилежении.
Вот одно из моих приложение, простой калькулятор на Electron, фон полупрозачный с blur эффектом, ночью тёмная тема, днём светлая тема. Я ещё для понтов поставил эту CSS библиотеку - https://animate.style/
По многим причинам, по моему мнению WPF медленнее работает, чем допустим WinForms
Мнение интересное, но не вижу бенчмарков :)
не зря ведь Murr выберает хороший себе компьютер.
Ага, исключительно из-за WPF :D
Я думаю задачу ТС на WinForms можно было сделать в два счёта.
На WinForms задолбаешься делать сложные контролы.
С вами не согласен, это вообще-то то, что мы в самом начале учебного года учили, когда я поступил только в колледж, про кроссплатформенность наверное нам семестр рассказывали
То, что вам семестр рассказывали про кроссплатформенность не означает, что она широко применяется. Нам семеместр рассказывали про Lisp, про Prolog и целых 2 семестра рассказывали теорию графов в курсе под названием "базы данных"
А кто конкурент? Они просто не смогли портировать на все устройства, а на смартфоне Silverlight хорошо кушает аккумулятор.
Конкурент HTML+фремворки. Также как и Flash загнулся.