|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
||||||
.NET Core Передача из второстепенной VM в основную VM19.01.2022, 09:02. Показов 3320. Ответов 33
Добрый день!
Ни как не могу сообразить как реализовать передачу данных между VM. Прикреплен тестовый проект. Есть три VM (MainViewModel,LogViewModel,SecondViewMo del). LogViewModel Это скорее всего модель ни как не могу разобрать что должно быть моделью, а что VM? в MainViewModel создается ObservableCollection Logs куда по задумке должны писать логи основная MainViewModel и SecondViewModel.
0
|
||||||
| 19.01.2022, 09:02 | |
|
Ответы с готовыми решениями:
33
Передача данных из dll в основную программу
Передача массива из DLL в основную программу |
|
Модератор
|
||||||||||||
| 26.01.2022, 10:54 | ||||||||||||
|
marat1905, Но такую отписку очень трудно реализовать - нужно внедрение слабых событий.
Поэтому обычно поступают по другому. Такую подписку реализуют токо на вышестоящих уровнях, так как они знают когда удаляется ссылка на нижестоящий. А когда нужно реализовать обратную зависимость, в нижестоящих используют для этого не конструктор, а внедряющий метод. И при изменениях на вышестоящих уровнях вызывают это метод. Dependency Injection
Это же совершенно разные вещи. Второе тоже, конечно, бывает нужно. Но очень редко, в каких-то исключительных задачах.
1
|
||||||||||||
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
||
| 26.01.2022, 11:24 [ТС] | ||
|
Элд Хасп,
Ошибка CS8057 Нельзя указывать тела блоков одновременно с телами выражений. TestVM C:\Users\BDM1\source\repos\TestVM\TestVM \ViewModel\SecondViewModel.cs 17 Активные
0
|
||
|
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
| 26.01.2022, 11:27 | |
|
попробуйте без ">"
0
|
|
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
|
| 26.01.2022, 11:39 [ТС] | |
|
Элд Хасп, нашел. извиняюсь я косяк
0
|
|
|
Модератор
|
||||||||
| 26.01.2022, 12:57 | ||||||||
Там нужно не присваивание, а явный геттер убрать. Оператор => - это тоже упрощённое задание геттера для свойства.А два геттера у свойства быть не может. Добавлено через 42 секунды marat1905, так какой из вариантов выбрали для реализации?
1
|
||||||||
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
|
| 26.01.2022, 13:43 [ТС] | |
|
Элд Хасп, последний вариант выбрал. Все работает как хотелось. Только разобраться что да как это работает
0
|
|
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
||
| 26.01.2022, 18:07 [ТС] | ||
|
Элд Хасп, Надо читать про интерфейсы. Значит на нижестоящих лучше использовать метод,
![]()
0
|
||
|
Модератор
|
|||
| 26.01.2022, 18:16 | |||
|
Можно передавать и саму основную VM.... но как-то это очень криво. Он используется для создания зависимосте. Там откуда брали его, в том же посте есть объяснения и пример. В Студии набираете protected override и Ctrl+пробел - Студия или сразу вставит метод или покажет список и из него выберите.
0
|
|||
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
||
| 26.01.2022, 18:40 [ТС] | ||
|
Элд Хасп,
Ошибка CS1520 Метод должен иметь тип возвращаемого значения TestVM C:\Users\BDM1\source\repos\TestVM\TestVM \ViewModel\SecondViewModel.cs 20 Активные
0
|
||
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
||
| 26.01.2022, 19:32 [ТС] | ||
|
Элд Хасп,
Я так понял если нужно из дочернего класса передавать на главную то лучше с подпиской. а если обратная ситуация то так через метод?.
0
|
||
|
Модератор
|
||
| 26.01.2022, 19:55 | ||
|
Вся загвоздка именно в подписке. При подписке передаётся делегат метода. В этом делегате есть ссылка на экземпляр откуда метод. Поэтому если нужно удалить экземпляр, то нужно и удалить все его подписки. А более-менее просто это можно сделать только в месте где создаётся/удаляется/добавляется экземпляр. Так как добавление экземпляра в основную VM она может контролировать. То основной VM подписаться/отписаться на события дочерней не трудно. А вот обратная задача резко усложняется, так как дочерняя VM понятия не имеет кто её создал, кто содержит ссылку на неё, когда эти ссылки будут удаляться и т.д. Это довольно сложно решается с помощью слабых событий, но проблема в том, что это должна быть реализация источника событий, а не слушателя. Поэтому в данном случае, даже этот сложный механизм, всё равно не даст нужного результата. Поэтому для "нисходящих" сообщений обычно реализуется последовательный вызов методов нижестоящих объектов.
1
|
||
|
1 / 1 / 1
Регистрация: 19.12.2016
Сообщений: 153
|
|
| 26.01.2022, 20:13 [ТС] | |
|
Элд Хасп, Спасибо большое за разъяснения.
0
|
|
| 26.01.2022, 20:13 | |
|
Передача данных из Dll в основную программу Передача значения массива в основную функцию Передача значений двух переменных в основную функцию Передача данных из диалогового окна в основную форму
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|