Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Заморочка интересная с WPF binding

1981  1 2 3 4 5 6 все
Программист коренной житель07.12.20 13:23
NEW 07.12.20 13:23 
в ответ AlexNek 07.12.20 12:54
Для демки, конечно никакой разницы.

Ну так об этом и речь.


Обычно такPropertyChanged();
Раньше было такPropertyChanged(nameof(Person));
В разных расширениях может быть еще встроенная проверка на ==, соответсвенно количество аргументов чуть больше

Это все мило, но не имеет никакого отношения к заданному вопросу.

UI обновляется проверти после вызова эвента PropertyChanged. Обновилось там значение или нет - не важно, геттер будет вызван.

Код OnPropertyChanged moose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на null и дергать PropertyChanged только если предыдущее значение было null, а потом удивляться, почему оно так работает улыб


#41 
Murr патриот07.12.20 17:28
Murr
NEW 07.12.20 17:28 
в ответ AlexNek 06.12.20 20:06

Левый alt = Alt Правый alt = ALT

-----

Ты не совсем прав.

Скан-код будет один и тот же, но префикс будет другим.

https://docs.microsoft.com/en-us/windows/win32/api/winuser...


Чтобы работал при любой последовательности нажатий.

-----

Там нет последовательности.

Там есть информация об состоянии служебных (шифт, альт, контрол) клавиш на момент нажатия альфа-цифрo-буквы.

#42 
uscheswoi_82 местный житель07.12.20 21:05
NEW 07.12.20 21:05 
в ответ Программист 07.12.20 13:23
Это все мило, но не имеет никакого отношения к заданному вопросу.UI обновляется проверти после вызова эвента PropertyChanged. Обновилось там значение или нет - не важно, геттер будет вызван.Код OnPropertyChanged moose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на 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.
Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#43 
uscheswoi_82 местный житель07.12.20 21:45
NEW 07.12.20 21:45 
в ответ uscheswoi_82 07.12.20 21:05

P.S.:У WPF её нисша это визуализация данных, а не работа с формами, и больше подходит для HMI/SCADA, а не как типичное десктопное приложение. Мне один умный дотнетчик сказал, чтобы я на HTML5 переходил, хотя он большой фанат C#/.NET.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#44 
AlexNek патриот07.12.20 22:09
AlexNek
NEW 07.12.20 22:09 
в ответ Murr 07.12.20 17:28
Скан-код будет один и тот же, но префикс будет другим.

Это если в консоли постоянно опрашивать всё.


Здесь же речь идет конкретно об этом:

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

#45 
  moose коренной житель07.12.20 22:45
NEW 07.12.20 22:45 
в ответ uscheswoi_82 07.12.20 21:45
Мне один умный дотнетчик сказал, чтобы я...

... не обижался? который из них?



#46 
  moose коренной житель07.12.20 22:48
NEW 07.12.20 22:48 
в ответ Программист 07.12.20 13:23
Код OnPropertyChanged moose не привел. Что он там делает и как проверяет - остается за кадром. Если он проверяет объект на == , то это уже его тараканы. Могбы тогда проверить на null и дергать PropertyChanged только если предыдущее значение было null, а потом удивляться, почему оно так работает улыб

мы еще не видали, но осуждаем : )


#47 
uscheswoi_82 местный житель07.12.20 23:40
NEW 07.12.20 23:40 
в ответ moose 07.12.20 22:45, Последний раз изменено 07.12.20 23:44 (uscheswoi_82)
... не обижался? который из них?

Тут написано https://ru.wikipedia.org/wiki/Windows_Presentation_Foundat...:

Windows Presentation Foundation (WPF) — аналог WinForms, система для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем, графическая (презентационная) подсистема в составе .NET Framework (начиная с версии 3.0), использующая язык XAML.

Допустим захотят отказаться от WPF или от NET, эти знания уже будут бесполезными, и всё прийдётся переучивать с нуля.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#48 
Программист коренной житель08.12.20 09:08
NEW 08.12.20 09:08 
в ответ moose 07.12.20 22:48
мы еще не видали, но осуждаем : )

Мы не осуждаем. Мы не видим причин почему бы этому коду не работать. Тем более, что мой пример показывает, что работать должно. Приведи пример кода.

#49 
Программист коренной житель08.12.20 10:56
NEW 08.12.20 10:56 
в ответ uscheswoi_82 07.12.20 21:05
Уже давно надо было перейти с WPF на HTML... а не париться с десктопным приложением.

Почему? Ведь если ты делаешь десктопное приложение, то WPF как раз то, что доктор прописал :)


Когда я в колледже учился, нам вбивали в голову про кроссплатформенность

Кроссплатформенность нужно далеко не всем. Более того, в большинстве случаев она не нужна.


например они сами от Silverlight отказались

Технология не выдержала конкуренции и умерла. Ничего необычного в этом нет.



Мне один умный дотнетчик сказал, чтобы я на HTML5 переходил, хотя он большой фанат C#/.NET.
Мне кажется, что у каждой технологии есть свое преминение. Я не вижу смысла переходить на HTML в десктопном прилежении.
#50 
  moose коренной житель08.12.20 15:22
NEW 08.12.20 15:22 
в ответ moose 02.12.20 16:07
в этом же контроле имеются и другие DependencyProperties, которые типа примитивов: строки, целые ... некоторые я использую просто чтобы "передать сообщение" контролу. само проперти у объекта DataContext просто всегда возвращает одно и то же значение, просто пишу OnPropertyChanged ("blablabla");, и в PropertyChangedCallback юзэрконтрола делаю что надо по этому событию.

это я написал? это - брэхня! странно, что уважаемое комъюнити не возразило. я уже не могу знать, почему я так решил, видимо, на тот момент было что-то, что такое впечатление создало. это - тоже не работает, как я ожидал.

видимо, где-то "в междуящичном пространстве" происходит какая-то оптимизация, и если гэттэр возвращает то же значение, что уже стоит в контроле, его PropertyChangedCallback не вызывается. единственный выход - передавать каждый раз значение отличное от предыдущего.

вообще, повторю, мне не нравится как я сделал дезигн. мне нужно, чтобы контрол реагировал на события, при этом выполнял некоторые действия, связанные с новым значением (свойствами) некого объекта. ДАЖЕ ЕСЛИ ОБЪЕКТ НЕ ИЗВЕНИЛСЯ! решил воспользоваться байндингом, дабы не нарушать святых принципов mvvm/ но вот получается такая штука как описываю. можно, конечно, чтобы адаптер бросал событие, на которое контрол бы подписался, но это некошер. как еще юзырь-контрол завтавить на что-то отреагировать, используя какие-то данные?

пока оставляю все как есть. естественно, каждый раз беспокоясь о том, чтобы был новый объект.

#51 
Murr патриот08.12.20 16:23
Murr
NEW 08.12.20 16:23 
в ответ AlexNek 07.12.20 22:09

Это если в консоли постоянно опрашивать всё.

-----

Это при каждом нажатии.

Опрашивать - можно, но не нужно - все и так будет.

Если мало того что идет в данных евента - можно взять что-то что мелкомягкие делали для игрушек - там точно отслеживаются все изменения состояния клавиатуры.


хотим пользовать e.Key с

-----

Не помню что есть в этих эвентах - давно не работал с клавой на этом уровне.

Возможно, что что-то обрезали, но скорее всего где-то что-то оставили... возможно - неявное, недокументированноe...

#52 
AlexNek патриот08.12.20 21:55
AlexNek
NEW 08.12.20 21:55 
в ответ Murr 08.12.20 16:23
но скорее всего где-то что-то оставили... возможно - неявное, недокументированноe...

Тебе дать простейшие исходники поиграться?

Нормальные данные нашел только в "массиве состояния" клавиш.


Что то типа "буква"+состояние дополнительных клавиш, не нашел. Да и не должно вроде быть, а то что делать с контрол/стрелка, алт/капс лоск и т.п.

#53 
AlexNek патриот08.12.20 22:04
AlexNek
NEW 08.12.20 22:04 
в ответ moose 08.12.20 15:22
связанные с новым значением (свойствами) некого объекта. ДАЖЕ ЕСЛИ ОБЪЕКТ НЕ ИЗМЕНИЛСЯ!

если у объекта имеется новое значение, то объект вообще то изменился. смущ

Можно ли нормальное описание задачи написать? Наверняка народ чего-то придумает.


мне нужно, чтобы контрол реагировал на события

Зависит еще и от того как будет использоваться контрол, в простейшем случае можно сделать всё через его ViewModel.

Можно еще сделать дополнительный объект "События" и через него всё передавать.

#54 
  moose коренной житель08.12.20 23:15
NEW 08.12.20 23:15 
в ответ AlexNek 08.12.20 22:04
Зависит еще и от того как будет использоваться контрол, в простейшем случае можно сделать всё через его ViewModel.

наверное, это если не оптимальное решение, то очень к нему близко. попробую перелопатить завтра. возможно, кое-какие побочные ляпы исчезнут.

Можно еще сделать дополнительный объект "События" и через него всё передавать.

можно, но для этого контрол должен знать о том классе, который является паблишером, чтобы иметь возможность подписаться. а это - полный некошер.


#55 
AlexNek патриот08.12.20 23:40
AlexNek
NEW 08.12.20 23:40 
в ответ moose 08.12.20 23:15
но для этого контрол должен знать о том классе,

достаточно знать только интерфейс, очень даже кошер смущ

#56 
Murr патриот09.12.20 00:40
Murr
NEW 09.12.20 00:40 
в ответ AlexNek 08.12.20 21:55

Да и не должно вроде быть

-----

Состояние всех служебных кнопок фиксируется на уровне Винды на момент получения скан-кода от клавы...

Где находится и как получить - давно не помню. Точнее - помню... для ДОСа...

#57 
uscheswoi_82 местный житель09.12.20 03:24
NEW 09.12.20 03:24 
в ответ Программист 08.12.20 10:56
Почему? Ведь если ты делаешь десктопное приложение, то 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.

Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#58 
uscheswoi_82 местный житель09.12.20 06:52
NEW 09.12.20 06:52 
в ответ Программист 08.12.20 10:56
Я не вижу смысла переходить на HTML в десктопном прилежении.

Вот одно из моих приложение, простой калькулятор на Electron, фон полупрозачный с blur эффектом, ночью тёмная тема, днём светлая тема. Я ещё для понтов поставил эту CSS библиотеку - https://animate.style/


Если я кому-то отвечаю, это не значит что я ему симпатизирую, каждый остаётся при своём мнение
#59 
Программист коренной житель09.12.20 10:20
NEW 09.12.20 10:20 
в ответ uscheswoi_82 09.12.20 03:24
По многим причинам, по моему мнению WPF медленнее работает, чем допустим WinForms

Мнение интересное, но не вижу бенчмарков :)


не зря ведь Murr выберает хороший себе компьютер.

Ага, исключительно из-за WPF :D


Я думаю задачу ТС на WinForms можно было сделать в два счёта.

На WinForms задолбаешься делать сложные контролы.

С вами не согласен, это вообще-то то, что мы в самом начале учебного года учили, когда я поступил только в колледж, про кроссплатформенность наверное нам семестр рассказывали

То, что вам семестр рассказывали про кроссплатформенность не означает, что она широко применяется. Нам семеместр рассказывали про Lisp, про Prolog и целых 2 семестра рассказывали теорию графов в курсе под названием "базы данных"


А кто конкурент? Они просто не смогли портировать на все устройства, а на смартфоне Silverlight хорошо кушает аккумулятор.

Конкурент HTML+фремворки. Также как и Flash загнулся.

#60 
1 2 3 4 5 6 все