|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||||||||||||
ReactiveUI.Foody propetychanged26.06.2022, 02:22. Показов 3562. Ответов 53
Метки нет (Все метки)
Есть свойство:
В ответе от Someone007 в теме https://www.cyberforum.ru/wpf-... st16027540 Я вижу немного другую реализацию объявления:
Можно сделать через ReactiveProperty<string?> Name { get; set; }, по идее должно заработать, но тогда в View придётся постоянно указывать .Value, что, по сути, является нарушением MVVM, View ничего не должна знать о том, как устроены свойства.
0
|
||||||||||||||||
| 26.06.2022, 02:22 | |
|
Ответы с готовыми решениями:
53
ReactiveUI составное свойство
|
|
Модератор
|
||
| 27.06.2022, 12:30 | ||
|
Я о том какой код в действительности создают ReactivUI и Reactiv.Fody. Особенно последний, он же вносит изменения в CIL уже после компиляции Шарпа. Добавлено через 1 минуту И понять какие он внёс изменения можно либо через дизассемблер CIL, либо через рефлексию в рунтайм.
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 27.06.2022, 13:22 | ||
|
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 27.06.2022, 13:45 | |
|
Проверил на минимальном примере - всё ок работает.
В т.ч. с биндингом на свойство вложенной VM.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 27.06.2022, 16:04 [ТС] | |
|
kotelok, Элд Хасп, собрал простой пример:
0
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 27.06.2022, 16:20 | |
|
А что именно должно в UI происходить?
У меня работает так, что при вводе любого текста, кроме пробелов и пустой строки, появляется зелёная галочка. Если данные удалить (или оставить только пробелы), галочка исчезает.
0
|
|
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||
| 27.06.2022, 16:38 [ТС] | ||
private set, о котором, собственно, и идёт речь
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 27.06.2022, 18:31 [ТС] | |
|
Элд Хасп,
![]() Добавлено через 18 секунд Не по теме: давно? Добавлено через 1 минуту Элд Хасп, ну, как вариант, можно через TeamViwer поключиться, через телефон
0
|
|
| 27.06.2022, 18:36 | ||
|
Не по теме:
Думал проблема с БП, но оказалось нет. Комп старый - почти 12 лет. Полетел проц. Но тестирование показало что уже все комплектующие "просели": диск, мат.плата, ОЗУ, БП. Поэтом ремонтировать смысла нет. Надо выбраться в город - купить новый. Потом на него восстановить всё что было. Со временем туго, а в целом на это может пара-тройка дней уйти. Сейчас работаю с другого, но он не мой и без Студии.
0
|
||
| 27.06.2022, 18:55 [ТС] | |
|
Не по теме: Элд Хасп, без студии? Кем же Вы работаете? Не WPF разработчиком чтоль?
0
|
|
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||||||||||||
| 28.06.2022, 08:26 | ||||||||||||
|
Однако, после первого срабатывания, WPF почему-то удаляет биндинг на свойство 'StateBox.IsValidProperty' для экземпляра 'local:StateTextBox'. Задайте для 'local:StateTextBox' какое-нибудь имя:
В подробности вдаваться сложно, но тут, вроде, описано что-то похожее, и там тоже (в ответе) упоминается удаление привязки после первого срабатывания: https://stackoverflow.com/ques... -only-once
0
|
||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 28.06.2022, 11:32 [ТС] | |
|
kotelok, я понимаю, что у меня пропадает привязка, вот как это решить?
Весьма странное поведение программы. С ссылкой на источник ознакомился, но там внятного ответа не нашёл.
0
|
|
|
Модератор
|
||
| 28.06.2022, 11:34 | ||
|
Тем самым подтверждается моё предположение, что указанным образом изменяется не свойство источник, а целевое свойство (или используется PropertyDescriptor, с аналогичными последствиями).
1
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 28.06.2022, 11:39 [ТС] | |
|
Элд Хасп, как я понял у kotelok, с другими свойствами, работает
private set.
0
|
|
|
Модератор
|
||
| 28.06.2022, 11:40 | ||
|
Нужно смотреть исходники, анализировать, тестировать в рунтайм, проверять CIL через рефлексию и т.д. Ближайшее время помочь этим не смогу.
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|||||||
| 28.06.2022, 14:06 | |||||||
Сообщение было отмечено limeniye как решение
РешениеВсё, нашёл. Проблема в рекурсивном вызове событий изменения DP-свойств друг-другом (IsValid меняет Status, Status меняет IsValid и т.д.). Почему проявляется только с приватным сетером - не знаю. Вероятно как-то связано с направлением привязки (Mode) и "особенностями внутренней реализации WPF". В методе 'System.Windows.DependencyObject.SetValu e', похоже нет проверки на то, что значение такое же. Соответственно, проблема обходится таким образом. Далее это можно как-то более красиво во вспомогательный метод оформить, который перед вызовом 'SetValue' будет проверку на эквивалентность делать и скипать 'SetValue', если значение не изменилось:
В исходниках, кстати, нет никаких явных проверок на ошибки рекурсивных вызовов, однако, там и в самом деле, на первый взгляд: 1. Не наблюдается сравнения нового значения с текущим. 2. При каждом срабатывании выполняется отключение старой привязки и создание новой. И вот если новую создать не получилось, то остаётся 'null'. https://github.com/dotnet/wpf/... ct.cs#L647
1
|
|||||||
|
Модератор
|
||||||||||||||||||||||
| 28.06.2022, 14:45 | ||||||||||||||||||||||
Сообщение было отмечено limeniye как решение
РешениеПроблема не в рекурсии - она не возникает, так как методы PropertyChangedCallback вызываются только при изменении значения.Если присваивается тоже самое значение, то метод вызван не будет. Кстати, это и пример для правильной реализации INPC.PropertyChanged, который лучше вызывать не при присвоении значения, а при его изменении. Что касается самой проблемы, то это изменение значения DP-свойства, которому задана привязка, методом SetValue() - он вызывается "под капотом" оболочки CLR свойства. Если свойству задана привязка в направлении к источнику (TwoWay, OneWayToSource), но у свойства источника нет публичного сеттера, или задан привязка только от источника (OneWay), то такие привязки при изменении целевого свойства отваливаются. По идее можно обрабатывать все эти состояния перед присвоением, но это не типично для WPF и лучше так не делать. В данном случае, ошибка не в самой реализации, а концептуальная. Для чего нужны два свойства с такой зависимостью друг от друга? По бизнес логике они одно и тоже. Вся их функция это двунаправленная конвертация Nullable<bool> <-> StatusEnum. Но такая конвертация - это задача конвертера, и нет необходимости для этого дублировать одно и тоже свойство, но с разными типами. Сам конвертер:
limeniye, метод ConvertTo реализован немного ущербно. Если свойство источник bool, то ему нельзя возвращать null - будет ошибка привязки и она может отвалится. Нужно задать два разных if для bool и Nullable<bool>. Для bool возвращать только два значения:
2
|
||||||||||||||||||||||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 28.06.2022, 17:36 [ТС] | |
|
Элд Хасп, kotelok, всем большое спасибо за участие в теме и Ваши ответы :3
0
|
|
|
Модератор
|
|
| 28.06.2022, 18:31 | |
|
limeniye, ещё одна мысль в голову пришла.
Возможно дефолтный EnumConverter может правильно конвертировать целочисленные типы. Так, что возможно, вы получили "бесплатную" конвертацию в целые свойства, и точно получили в стринг свойства.
0
|
|
| 28.06.2022, 18:31 | |
|
ReactiveUI уведомления и цепочки Пример запроса reactiveui / refit Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|