powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как лучше добавить в WPF MVVM архитектуру свои сервисы?
3 сообщений из 3, страница 1 из 1
Как лучше добавить в WPF MVVM архитектуру свои сервисы?
    #39261348
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы уже столько сказано о WPF MVVM, но тем не менее, вопрос без явного ответа.
Итак,
имеется набор Model и ViewModel, и между ними возникают связи. Например, мы пишем редактор, в нем будет ProjectModel - PrjectView - ProjectViewModel, и также 3 для документа. Редактируем документ, и находясь в DocumentViewModel (а может даже и в DocumentModel) нужно нам, к примеру, текст в statusBar поменять, а это находится в ведении главного окна, ProjectViewModel. Как туда пробросить сигнал? Вижу такие варианты:

1. Хранить ссылки на родительские модели и вьюмодели. Как-то некрасиво, принцип иерархии нарушается.
2. Система сообщений и агрегаторов. Неудобно, что это односторонняя связь, только сигнал в одну сторону.
3. Система сервисов. Кажется то, что нужно.

Как сделать сервис? Синглетон (самопальный) - нехорошо, сложно управлять временем жизни, пусть будет сервис, который мы регистрируем в IoC-ке каком-нибудь. В любой ViewModel можем его в конструкторе через DI получить, но остается 2 проблемы:
1. Непонятно, как получать в моделе.
2. И самое непонятное : как дать сервису доступ к ViewModel, необходимой для его работы? Поясню на примере. Сделали мы IFilesService, работающий с файловой системой, ничего кроме .net- классов не использует. Это одно. А вот IStatusBarNotification уже зависим от проекта, ему нужен доступ к statusBar, находящемся в ProjectViewModel. Получается, что при регистрации этого сервиса, ему нужно указать статусную строку, т.е. сделать регистрацию в IoC мы можем только в ProjectViewModel, но где, в конструкторе что ли? Обычно все сервисы регаются задолго до этого: в Bootstraper'е.

Идеи?
...
Рейтинг: 0 / 0
Как лучше добавить в WPF MVVM архитектуру свои сервисы?
    #39261479
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceРедактируем документ, и находясь в DocumentViewModel (а может даже и в DocumentModel) нужно нам, к примеру, текст в statusBar поменять, а это находится в ведении главного окна, ProjectViewModel. Как туда пробросить сигнал?Оформи части UI, отвечающие за разные предметные области, в виде Control-ов (UserControl, CustomControl, всё равно). Связывай их между собой DataBinding-ом на уровне View.

В твоём случае можно ввести базовый класс для документов (интерфейс?), содержащий свойство StatusText. "Забиндить" строку состояния на текущий документ, вероятно, не проблема.

Ну если решил заморочиться с DI:

TopSpace1. Непонятно, как получать в моделе.Модель не должна ничего знать про сервисы с логикой. Модель должна лишь хранить данные, может быть содержать логику, работающую только с хранящимися в ней данными.

TopSpace2. И самое непонятное: как дать сервису доступ к ViewModel, необходимой для его работы?Передавать Model/ViewModel в сервисы в качестве параметров методов.
...
Рейтинг: 0 / 0
Как лучше добавить в WPF MVVM архитектуру свои сервисы?
    #39261489
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceСинглетон (самопальный) - нехорошо, сложно управлять временем жизни, пусть будет сервис, который мы регистрируем в IoC-ке каком-нибудь.Не сложнее, чем управлять временен жизни LifetimeScope-а диконтейнера.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как лучше добавить в WPF MVVM архитектуру свои сервисы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]