MVVM и окно настроек14.03.2025, 16:34. Показов 3546. Ответов 23
Метки нет (Все метки)
Всем хорошего дня.
В общем вникая в WPF и MVVM у меня начало подгорать то самое место. А всё из-за чего? Есть главное окно приложения и его VM1, в какой-то момент пользователь может вызвать окно настроек (локальные настройки рабочего места). Следовательно из VM1 порождается окно настроек, которое порождает свою VM2. VM2 должна изменить "модель настроек", которая, в свою очередь, должна повлиять на модель, с которой работает VM1 Таким образом на старте работы VM1 "модель настроек" уже должна существовать! Либо сама "модель настроек" должна рожать VM1/VM2 чтобы те могли подписаться на события "модели настроек". В общем не понятно что должно быть первым курица или яйцо. Кто кого должен создавать?По начитался этого и ещё несколько тем по этому поводу - голова закипела. В целом всякие локаторы и прочее почти всегда это статик объект, который создаётся в точке входа или в крайнем случае при первом обращении (синглетон). Но неужели нельзя как-то проще.
0
|
|
| 14.03.2025, 16:34 | |
|
Ответы с готовыми решениями:
23
Как правильно реализовать сохранение и восстановление настроек в MVVM? MVVM закрыть окно
|
|
|
||||
| 17.03.2025, 17:07 | ||||
|
И я шатал трубу использовать этот подход как "универсальный". Вводиться сообщения "подключись по IP". У тебя изначально один модуль который куда-то там подключается. Потом модулей становится два~много, и уже нужно править сообщение "такой-то подключись по IP", потому что шина одна, слушают её все и нужно вдуплять кому это сообщение адресовано. И это ещё скромный вариант, порой сыпется 100500 сообщений, а тебе нужно одно конкретное. В подходе DI или даже когда тупо прокидываешь ссылки ты просто выделяешь конкретный скоп и существующий внутренний код не нужно трогать. Шину сообщений стоит использовать только в случаях когда у тебя есть логика подразумевающая отправку команд без ответа с разных источников разным приемникам (причём очень часто эти участники ещё и динамически появляются и отпадают). Ну или есть паттерны аля CQRS + events_sourcing, но там очередь -- только часть общего комбайна, read идет не через неё. -------- В общем случае я бы использовал варианты 1 или 3. По варианту 5 ничего не подскажу (ибо не знаю). От варианта 4 я бы отпирался всеми силами (разве что CQRS + events_sourcing, и то если проект располагает к этому). ТСу я бы рекомендовал начать с варианта 1.
0
|
||||
|
|
|||||||
| 17.03.2025, 17:32 | |||||||
Некий намек на ваш ник ![]() Есть такое дело. Но опять же, все упирается в реализацию. MessageBus нельзя обойти стороной в данном случае. Мы думаем, прежде всего, про "меж-оконный" обмен и настройки, как частный случай этого обмена. ТСу от него не уйти, если он на самом деле будет продвигаться по этой теме.
0
|
|||||||
| 18.03.2025, 08:47 [ТС] | ||
|
Мало того, что я знаю что такое Очередь Сообщений, так я даже использовал её, правда всего в одном проекте. В моём текущем проекте её конечно можно прикрутить, но главный вопрос был не в механизме доставки сообщений об изменении настроек, а в том, что "модель настроек" должна появиться на уровне приложения, а не при создании какого-то представления или его VM, и все модели представления должны получать её изменения и читать нужные им настройки. В целом вопрос темы считаю для себя решённым. Используя DI "модель настроек" будет передаваться всем заинтересованным объектам. Все, кто принимал участие в обсуждении, большие молодцы. Всем спасибо!
0
|
||
| 18.03.2025, 12:21 | |
|
Не по теме: Uswer, из 10-ти ТСов 8 точно не знают!
0
|
|
| 18.03.2025, 12:21 | |
|
Общее окно настроек
Окно или панель настроек Как из DataGrid открыть новое окно MVVM Открыть окно настроек Windows по ссылке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
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.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|