Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1

MVVM и окно настроек

14.03.2025, 16:34. Показов 3546. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем хорошего дня.

В общем вникая в WPF и MVVM у меня начало подгорать то самое место. А всё из-за чего? Есть главное окно приложения и его VM1, в какой-то момент пользователь может вызвать окно настроек (локальные настройки рабочего места). Следовательно из VM1 порождается окно настроек, которое порождает свою VM2. VM2 должна изменить "модель настроек", которая, в свою очередь, должна повлиять на модель, с которой работает VM1 Таким образом на старте работы VM1 "модель настроек" уже должна существовать! Либо сама "модель настроек" должна рожать VM1/VM2 чтобы те могли подписаться на события "модели настроек". В общем не понятно что должно быть первым курица или яйцо. Кто кого должен создавать?

По начитался этого и ещё несколько тем по этому поводу - голова закипела. В целом всякие локаторы и прочее почти всегда это статик объект, который создаётся в точке входа или в крайнем случае при первом обращении (синглетон). Но неужели нельзя как-то проще.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2025, 16:34
Ответы с готовыми решениями:

Как правильно реализовать сохранение и восстановление настроек в MVVM?
Тема создана разделением родительской: https://www.cyberforum.ru/wpf-silverlight/thread2893907-page7.html#post15911402 Элд Хасп, Я...

MVVM закрыть окно
Нужно закрыть окно. Как в команде прописать закрытие окна? <Button x:Name="SaveSettingsButton" Command="{Binding...

Как закрыть окно в MVVM
Открываю новое окно вот таким способом, а вот как закрыть не предстовляю так как команда закрытия должна находиться в другом классе так как...

23
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
17.03.2025, 17:07
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
Вариант 4. Использование MessageBus (шина сообщений).
По сути это MQ (думаю он более знаком людям). И у этого подхода одна радикальная проблема -- нельзя нормально делать GET (в этой конструкции оно и не заложено). Обычно реализуют через таски ожидающие прилёта сообщений, который запросто могут повиснуть.

И я шатал трубу использовать этот подход как "универсальный". Вводиться сообщения "подключись по IP". У тебя изначально один модуль который куда-то там подключается. Потом модулей становится два~много, и уже нужно править сообщение "такой-то подключись по IP", потому что шина одна, слушают её все и нужно вдуплять кому это сообщение адресовано. И это ещё скромный вариант, порой сыпется 100500 сообщений, а тебе нужно одно конкретное.

В подходе DI или даже когда тупо прокидываешь ссылки ты просто выделяешь конкретный скоп и существующий внутренний код не нужно трогать.

Шину сообщений стоит использовать только в случаях когда у тебя есть логика подразумевающая отправку команд без ответа с разных источников разным приемникам (причём очень часто эти участники ещё и динамически появляются и отпадают). Ну или есть паттерны аля CQRS + events_sourcing, но там очередь -- только часть общего комбайна, read идет не через неё.

Цитата Сообщение от wizard41 Посмотреть сообщение
Вариант 2. Наличие публичного события "Обновления" в самом объекте Настроек.
Не особо понял задум. event решают вопрос "рассылки" и не более. Я отнёс это к п.1 т.к. нам всё равно нужно прокидывать объект, который будет знать об это ивенте (хотя прокинуть можно и через DI)

Цитата Сообщение от wizard41 Посмотреть сообщение
Вариант 6. Использование "гибридов".
Стоит избегать, но когда юзаешь либы -- никуда не денешься. Пусть лучше подход будет не очень, но однотипный, а не "каждый пишет как он дышит". Хотя на практике проекты очень часто в это состояние и скатываются. Плак.

--------

В общем случае я бы использовал варианты 1 или 3. По варианту 5 ничего не подскажу (ибо не знаю). От варианта 4 я бы отпирался всеми силами (разве что CQRS + events_sourcing, и то если проект располагает к этому).

ТСу я бы рекомендовал начать с варианта 1.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
17.03.2025, 17:32
Цитата Сообщение от Wolfdp Посмотреть сообщение
По сути это MQ (думаю он более знаком людям).
Согласен. Но он не знаком ТСу! Поэтому я не стал давать отсылки на него, дабы не "затуманить" и так не очень ясное сознание.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Обычно реализуют через таски ожидающие прилёта сообщений, который запросто могут повиснуть.
"Волков бояться - в лес не ходить" Некий намек на ваш ник
Есть такое дело. Но опять же, все упирается в реализацию. MessageBus нельзя обойти стороной в данном случае. Мы думаем, прежде всего, про "меж-оконный" обмен и настройки, как частный случай этого обмена. ТСу от него не уйти, если он на самом деле будет продвигаться по этой теме.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Не особо понял задум. event решают вопрос "рассылки" и не более.
Когда объект Настройки синглтон. У него может быть евент, который можно дернуть. Причем этот объект не обязательно прокидывать из чего-либо. Да, этот вариант можно спокойно совместить и с п.1 и с DI. Просто посчитал нужным отдельного упоминания про это способ.
Цитата Сообщение от Wolfdp Посмотреть сообщение
Стоит избегать, но когда юзаешь либы -- никуда не денешься.
Само собой. Мало кто в здравом уме будет писать это своими руками. Но знать об этом нужно.
Цитата Сообщение от Wolfdp Посмотреть сообщение
но однотипный, а не "каждый пишет как он дышит"
Тоже верно. Но здесь именно тот случай, когда ТС пишет сам для себя (вернее, он единственный автор своего творения). Поэтому и выбор стиля только за ним одним.
Цитата Сообщение от Wolfdp Посмотреть сообщение
я бы использовал варианты 1 или 3.
Аналогичное мнение. Вар 3 я сразу предложил, чтобы не "мучаться"... ))
0
2298 / 1614 / 400
Регистрация: 26.06.2017
Сообщений: 4,780
Записей в блоге: 1
18.03.2025, 08:47  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Согласен. Но он не знаком ТСу!
Без обид, но почему Вы всегда огульно делаете выводы о знаниях других? (не только в отношении меня кстати)

Мало того, что я знаю что такое Очередь Сообщений, так я даже использовал её, правда всего в одном проекте. В моём текущем проекте её конечно можно прикрутить, но главный вопрос был не в механизме доставки сообщений об изменении настроек, а в том, что "модель настроек" должна появиться на уровне приложения, а не при создании какого-то представления или его VM, и все модели представления должны получать её изменения и читать нужные им настройки. В целом вопрос темы считаю для себя решённым. Используя DI "модель настроек" будет передаваться всем заинтересованным объектам.
Все, кто принимал участие в обсуждении, большие молодцы. Всем спасибо!
0
18.03.2025, 12:21

Не по теме:

Uswer, из 10-ти ТСов 8 точно не знают!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2025, 12:21

Общее окно настроек
Здравствуйте! Такая ситуация: есть форма с табконтролом, на котором n-e количество вкладок; в каждой вкладке есть таблица (пусть...

Как открыть диалоговое окно MVVM
Есть у меня MainWindow и есть ещё одно окно з своим ViewModel классом как открыть второе окно из viewmodel окна mainwindow?

Окно или панель настроек
Как создать такое окно настроек? Допустим я кликаю через меню, Файл->настройки А после у меня должно появиться окно, как его сделать!!

Как из DataGrid открыть новое окно MVVM
На данный момент хочу по нажатию на любую ячейку из Норма расхода чтобы открылось окно и заполнилось теми данными каторыми обладает строчка...

Открыть окно настроек Windows по ссылке
Не знаю как такое называется, не уверен даже, что правильно сформулировал мысль в заголовке. Суть в том что в некоторых программах можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
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. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru