|
|
|
.NET 4.x Уведомление об изменении свойств класса разного типа10.02.2024, 13:29. Показов 2115. Ответов 29
Всем приветы!
Как говорится - о чем долго хотели спросить, но стеснялись (шутка)В общем, суть в следующем: есть некий класс А, назовем его источником данных, и некий класс Б - соотв. приемник этих данных. Данные различного типа, будь то string, double... или вообще составные, типа структур или классов. Для того, чтобы класс Б определил что именно сейчас изменилось в классе А, я использую такой подход: в классе А объявлены публичные поля этих типов (данные) и некоторый делегат со строковым (string) аргументом. Когда некоторое поле данных изменилось, я делаю Invoke с "названием" параметра, а класс Б, получивший это название теперь "знает" какое поле из класса А дернуть для обновления уже своей модели... Этот подход использую давно, никаких нареканий и багов связанных с ним нет, потому долго откладывал идею по усовершенствованию его. Идея "усовершенствования" состоит в том, чтобы использовать событийную модель, но не отдавать все свойства целиком, а только то, что изменилось. Общий принцип мне понятен, и конечно, со временем я могу самостоятельно разобраться с этим, но если у кого есть какие идеи/примеры/где почитать по этому поводу (серьезные источники, не Метанит!) - буду признателен.
0
|
|
| 10.02.2024, 13:29 | |
|
Ответы с готовыми решениями:
29
Как получить уведомление о изменении свойств чужого контрола? Как построить класс так чтобы при изменении одного из свойств, класса создавался новый поток? Уведомление о изменении файла |
|
|
|||||||
| 11.02.2024, 17:39 [ТС] | |||||||
|
Пока сделано так: "кто подписан, тот и кушает кашу". А вот наоборот нельзя: в источнике ссылка на приемник не нужна. Добавлено через 8 минут Когда шло обсуждение INPC nameof() VS delegate xxx (string yyy).
0
|
|||||||
|
|
||||
| 11.02.2024, 18:05 | ||||
Боитесь участвовать в диспутах? Ведь коллекция создаётся? А чем если не перебором? Код не видел, но скорее всего рефлексией по полям класса. Добавлено через 2 минуты Мой вариант к этому коду какие имеет недостатки для вашего решения?
0
|
||||
|
|
|||||||||
| 11.02.2024, 18:15 [ТС] | |||||||||
Не будем торопить коней, я пока на стадии выбора - как и что применить, чтоб поближе к теме было.
0
|
|||||||||
| 11.02.2024, 18:33 | ||||||||||
Добавлено через 4 минуты
0
|
||||||||||
|
|
|||
| 11.02.2024, 18:45 | |||
Ну уберите сеттер. Теперь норм?То что вы уже объект там держите - уже подразумевает что вы с ним можете всё что угодно сделать. Добавлено через 5 минут Госпиди, я просто занудствую, а вы видимо не поняли на что именно я акцентирую внимание. Вот она коллекция. И я сказал - что если нет "перебора" тут, то значит просто уже кто-то сделал это ранее. И я лично "давлю" на то что задача "хочу свойство обновить из события" обрастает всякими рефлексиями и сложным кодом. И для меня уже само наличие такой коллекции означает что под это действие уже были выделены ресурсы и код занимался подготовкой для этого. А раз решение должно быть простым (а это моё первичное отношение к цели), то такие коллекции - симптом сложного решения. Щас понятно? ![]() /ДушнотаОфф
1
|
|||
|
|
||
| 11.02.2024, 18:46 | ||
|
1
|
||
|
|
||
| 11.02.2024, 18:58 [ТС] | ||
|
Если нужно в приемнике обновить некоторое свойство, которое изменилось в источнике, то необходимо: 1. издать сигнал (event) о том что произошло изменение; 2. извлечь то свойство, которое поменялось; 3. изменить сопоставленное ему свойство в получателе. И это да, это не UI элемент, где механизм Binding-а "сам все разруливает". Тут приходится самому (выискивать) менять именно то, что пришло - причем не важно каким путем: будь то INPC, либо Action либо руками созданный делегат. Ситуацию усугубляет тот факт, что обновить весь тип целиком (что легко) нельзя, т.к. это затрет (перезапишет) другие свойства, которые в данный момент трогать не нужно.
0
|
||
| 11.02.2024, 18:59 | |
|
Не по теме: На всякий: даже не самое оптимальное решение -- ок. Очень сложно придумать идеальное решение, а ресурс "время" далеко не бесконечен.
0
|
|
|
|
||
| 11.02.2024, 19:09 [ТС] | ||
|
Добавлено через 9 минут
0
|
||
| 11.02.2024, 19:09 | |
|
Уведомление об изменении внешнего ip-адреса Уведомление об изменении свойства зависимости Уведомление View об изменении only get свойства Уведомление об изменении файла в сети
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера 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: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|