Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 А как делать кошерно по MVVM?  [new]
13th
Member

Откуда:
Сообщений: 490
Ну, все видели 100 туториалов по MVVM, делаем окно, к нему ViewModel, свойства и всё такое.

А как организовывать межоконную передачу данных? Допустим, у меня приложение, у него окно с ViewModeлью. Я открываю диалог настроек (модальный). Откуда брать VM для него? Писать новую, и создавать её каждый раз, когда надо открыть окошко? Выделить набор полей в основной VM?
25 авг 16, 16:59    [19590518]     Ответить | Цитировать Сообщить модератору
 Re: А как делать кошерно по MVVM?  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21990
Что мешает создать отдельную VM для этого окна? Хранить его можно и в поле основной модели, или синглтоном сделать, если окно настроек открывается из разных мест, или создавать каждый раз, заполняя из БД и т.п.
25 авг 16, 21:05    [19591512]     Ответить | Цитировать Сообщить модератору
 Re: А как делать кошерно по MVVM?  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 4042
13th,

у меня сделано так:
есть WindowManager : IWindowManager, который открывает либо окно, либо диалоговое окно, в качестве аргументов ему нужна только ViewModel.
Далее WM ищет в ресурсах приложения и в ресурсах Parent окна (если это DialogWindow) стиль с ключом {x:Type MyViewModel}
для данной модели и открывает окно. MyViewModel наследован от WindowViewModel : IWindowModel куда засунуто закрытие окна из ViewModel, проверка при закрытии и прочие ништяки. В WindowManager добавлена вся анимация для окон, а список окон сделан в виде дерева или списка, кому как удобно.
В найденном стиле заданы все параметры для окна, включая свойства Content и ContentTemplate, либо ContentTemplateSelector, иконка и т.д.
Не думаю, что вариант претендует на удобный :) в текущем проекте по верх Manager'а окна идет еще Manager табов.
WM сделан по singleton шаблону и его можно получить в любой момент либо из ViewModel, либо из View. Когда открываю DialogBox из ViewModel, возникает вопрос, какое окно считать родительским, чтоб его "заблокировать", но я не парюсь и просто беру текущее.
25 авг 16, 21:12    [19591542]     Ответить | Цитировать Сообщить модератору
 Re: А как делать кошерно по MVVM?  [new]
13th
Member

Откуда:
Сообщений: 490
Shocker.Pro, ничего не мешает. Я спрашиваю: какая практика считается или показалась другим специалистам более usefull. Я оба описанных мною вариантов попробовал - пока не определился.
26 авг 16, 13:07    [19593991]     Ответить | Цитировать Сообщить модератору
 Re: А как делать кошерно по MVVM?  [new]
13th
Member

Откуда:
Сообщений: 490
Roman Mejtes, довольно замороченно. И не оч удобно (громоздко) для небольших приложений/модулей.
26 авг 16, 13:09    [19594006]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить