|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|||||||||||
Хотелось бы понять, почему неправильно работает триггер20.06.2021, 11:27. Показов 6578. Ответов 58
Метки нет (Все метки)
Набросал элементарный триггер для ToggleButton, а он в Checked режиме выводит пустую строку вместо заданной. Всё перерыл, неделю копался в отладчике -- всё должно работать, а не работает. Подскажите, пожалуйста, что я проморгал...
github: https://github.com/RayDIceman/testTriggerWpf Если без него, то так:
И вот ClosingText никогда не появляется, не понимаю, почему. если раскомментировать код, то всё ок, но не нравятся костыли. И так должно работать...
0
|
|||||||||||
| 20.06.2021, 11:27 | |
|
Ответы с готовыми решениями:
58
Не могу понять, почему программа неправильно работает! Программа работает неправильно (не так, как хотелось бы) Не могу понять, почему программа работает неправильно( Знаю, что где-то ошибки, но не могу найти |
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
||||||
| 20.06.2021, 17:16 [ТС] | ||||||
|
По моему скромному мнению, всё, что позволяет язык, должно работать. если что-то не работает в частном случае, значит это нельзя использовать. Ну, это, как, если бы
0
|
||||||
|
Модератор
|
|||
| 20.06.2021, 17:28 | |||
скромному мнению.К спеку языка это не имеет никакого отношения. Добавлено через 2 минуты У вас есть значение по умолчанию присваиваемое полю при создании экземпляра класса - это то что делает сеттер. Но вы при создании экземпляра сами изменили это значение на нужное вам. Что вы теперь удивляетесь что там не значение по умолчанию? Добавлено через 1 минуту Это простой случай, для обычного поля. Которому можно присвоить значение только ДВУМЯ разными способами: по умолчанию и явно при создании экземпляра. А у DP свойства ОДИНАДЦАТЬ разноприоритетных способа задать значение.
1
|
|||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
||||||
| 20.06.2021, 18:55 [ТС] | ||||||
|
1. При создании экземпляра поле Text пустое.
2. Оно меняется триггером, как и предписано XAML. 3. Значение берётся не из свойства зависимости. если свойство зависимости Text изменить так:
Это странно. Как будто в этом случае не срабатывает OnPropertyChanged какое-нибудь... Ворос, как я уже говорил, академический. Хочу разобраться, несмотря на...
0
|
||||||
|
Модератор
|
|||||
| 20.06.2021, 19:41 | |||||
|
У него самый низкий приоритет. Добавлено через 2 минуты myd.Text =... называется локальным.И у него почти самый высокий приоритет. После такого присвоения игнорируются все привязки, сеттеры и триггеры в шаблонах и стилях. Добавлено через 1 минуту Добавлено через 2 минуты "Ломается" сеттер <Setter Property="local:MyToggleButton.Text" Value=.....И триггер его использующий сам тоже "вылетает".
0
|
|||||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 20.06.2021, 19:47 [ТС] | |
|
Элд Хасп, при всём уважении, триггер успешно записывает пустое значение. Никто не говорит об ошибке. должен же я в отладчике увидеть это "вылетает", нет?
P.S. Ну я тупоооой, похоже.
0
|
|
|
Модератор
|
|||
| 20.06.2021, 20:07 | |||
Сообщение было отмечено Ray DIceman как решение
РешениеВозможно (даже наверняка) есть какие-то продвинутые средства отладки WPF, но Студия на это не способна. Это ОЧЕНЬ сложно. И без явной необходимости этим точно не стоит заниматься. Посмотрите тему: Непростое Решение для простой часто встречающейся задачи. Привязка TextBox к численному свойству. И в этой теме мною только КОРОТКО и не полно описано всё что я сделал для детального разбора проблемы. Я потратил полторы-две недели для того чтобы во всём этом разобраться. Тоже самое стили. Вы воспринимаете их как подпрограмму. И это специально так реализовано чтобы упростить для программистов создание XAML. Но попробуйте создать стиль "руками". Это очень сложная многоиерархическая коллекция разнообразных объектов совершенно независимая от того объекта (UI элемента) который будет её использовать. И любой стиль могут использовать одновременно множество различных объектов в совершенно разных Окнах или даже вне Окон, а где-то в недрах Шарп кода. Только для того чтобы разобраться как всё это работает надо детально просмотреть и ПОНЯТЬ несколько тысяч (или даже десятков тысяч) строк исходного кода. Да, если это ОЧЕНЬ нужно, то этим можно заняться. Как я сделал в вышеуказанной теме, так как это частовстречаемая проблема. Но настолько ли вам нужно разбираться почему один неправильный сеттер работает, а другой неправильный не работает? В любом случае они неправильные. И не надо так делать. Но если для вас это принципиально и вы хотите досконально в этом разобраться- кто вам мешает? Открывайте исходники и вперёд!
1
|
|||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 20.06.2021, 21:42 [ТС] | |
|
Да, это не нужно, но безумно интересно, и, наверняка, принесёт в дальнейшем пользу.
Добавлено через 11 минут Элд Хасп, и, вот что хотите со мной делайте, я должен понять, почему эти сеттеры неправильные. А я, пока, не понимаю. контрол. триггер на изменение собственного DP. сеттеры триггера изменяют опять-таки значение собственного DP. Уверен, почему то, что, если бы это был не CustomControl, всё бы работало. Впрочем, ничто не мешает попробовать. Лвдно, Эльдар, спасибо Вам за помощь и пинки в нужную сторону. Добавлено через 1 минуту Понял.
0
|
|
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 21.06.2021, 14:52 [ТС] | |
|
Элд Хасп, в процессе. покажу. Я, видимо, ошибся. хотел сказать ~"если бы это был не UserControl/если бы это был CustomControl"
Добавлено через 4 часа 0 минут Да то же самое, вид сбоку: Обычный текст триггер изменяет, DP не читает. https://github.com/RayDIceman/CustomControlTrigger
0
|
|
|
Модератор
|
||
| 21.06.2021, 19:55 | ||
|
Конкретно каждый пункт алгоритма и какой вид для каждого пункта. Именно "ЧТО", а не "КАК". И скиньте мне приглашение на соавторство. Акк EldHasp с аватаркой как здесь на Форуме.
0
|
||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 21.06.2021, 20:55 [ТС] | |
|
Элд Хасп, Я всем, вроде, доступ открыл...
0
|
|
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 22.06.2021, 15:29 [ТС] | |
|
Элд Хасп, Всё. https://github.com/RayDIceman/CustomControlTrigger, с вашей помощью полнлстью разобрался. Хоть и считаю, что дОлжно было работать и по-моему. Очевидно, цепочка Binding-а принудительно обрывается, нельзя делать её длинной и ветвистой.
0
|
|
|
Модератор
|
|||
| 22.06.2021, 15:43 | |||
|
Добавлено через 1 минуту А вы хотите на нём реализовать Бизнес Логику UI элемента. Это не правильно. БЛ реализуется на Шарпе.
0
|
|||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 22.06.2021, 16:15 [ТС] | |
|
Добавлено через 7 минут
mvvm же для чего-то сделали. Такая приятная вещь, и такая хилая :-)
0
|
|
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 22.06.2021, 17:03 [ТС] | |
|
При чём... Дали возможность разделить BL и UI, для этого ввели разметку и развили в ней, в частности, использование триггеров, анимации,... Получилось красиво. По поводу "не отдельных UI элементов"... С отдельных элементов начинается весь UI. и триггеры -- тоже БЛ отдельных элементов, они же есть. ладно, я, может, не прав в своих желаниях прекрасного и идеального. не будем холиварить. Спасибо. Инструмент нужно использовать до границ, на которые он способен. И знать эти границы очень важно. Спасибо, что помогли мнре их понять!
0
|
|
|
Модератор
|
|||||
| 22.06.2021, 21:54 | |||||
|
Привязки были ещё в Формах с Framework 1.1 (2003г.) WPF (Avalon) точно не помню, где-то 2002-2004 г. В составе Framework с 2006. MVVM представлен как адаптация MVC/MVP под особенности WPF в 2005г. То есть разделение UI и БЛ идея минимум на четверть века старше WPF и MVVM. Эта идея является логическим применением принципов ООП и SOLID на реализацию Решения в целом. А не как не полноценный язык для реализации Бизнес Логики. UI элемент разделяется функционально на две части. Логическая - определяющая его состояние. Логическую часть иногда называют Поведением элемента. При этом UI элемент НЕ ДОЛЖЕН влиять на представляемые данные. Допустим в вашем случае в свойство Text поступает строка от внешнего источника. Вы её изменяете логикой UI (без разницы XAML или Шарп), но это свойство связанно с данными. И его изменение влияет на данные. Такое поведение для UI элемента нарушает саму их концепцию и, следовательно, не допустимо. Так же состояние UI элемента недолжно иметь "истории". Оно должно полностью определяться текущими значениями своих публичных членов. Вторая часть - это визуализация элемента. Она задаёт отображение элемента во всех его состояниях. Но ни как не должна влиять на эти состояния. И XAML создан только для этой части. Вы просто плохо знаете ООП, SOLID, теорию построения ООП приложений и многое другое. Поэтому вам кажется что если бы да кабы, то на Луне парки зацвели... Вы не видите какие потенциальные проблемы это может создать, и насколько это будет "поперёк горла" проф. программистам. Стараюсь всегда и всем разъяснить детально в меру моего понимания. P.S. Вы покажите свой контрол. Я его ещё не видел, может там далеко не то, что должно быть. Не торопитесь. Вы же учитесь, так лучше сразу учиться правильному стилю программирования.
0
|
|||||
|
0 / 0 / 0
Регистрация: 30.03.2020
Сообщений: 28
|
|
| 22.06.2021, 23:09 [ТС] | |
|
Контрол там, в репе. Просто он, почему-то неполностью запушился вначале.
0
|
|
|
Модератор
|
||
| 23.06.2021, 10:27 | ||
|
Объясните теперь логику. Свойства OpeningText, ClosingText, ArrowData и Command - работают только на чтение. Свойство IsChecked - двунаправленное. А вот свойство Text - оно что делает? Почему оно работает на чтение? Что будет если ему зададут значение которое не соответствует OpeningText или ClosingText? Опишите как вы представляете логику для этой ситуации. Второй вопрос. Если есть свойство Command, то почему нет свойства CommandParameter? Третий вопрос. Стрелка у вас это UI элемент. В частном случае, можно каким-то костылём получить из строки этот UI элемент и то только для одного состояния вверх или вниз. Намного логичнее если это было не string свойство, а шаблон для Boolean. Тогда можно было бы задать в нём оба состояния стрелки.
0
|
||
| 23.06.2021, 10:27 | |
|
Понять, почему не срабатывает триггер Неправильно работает триггер Неправильно работает триггер на удаление и запрет вставки Почему смена текста работает только один раз? Что неправильно в коде и почему?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|