powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как сделать модальное окно в MVVM?
25 сообщений из 27, страница 1 из 2
Как сделать модальное окно в MVVM?
    #37104576
vlsaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать модальное окно в MVVM?
Для простых приложений делал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        public View_WindowFilter(Window owner)
        {
            InitializeComponent();

            HwndSource source = HwndSource.FromVisual(owner) as HwndSource;
            if (source != null)
            {
                WindowInteropHelper helper = new WindowInteropHelper(this);
                helper.Owner = source.Handle;
            }
        }

Но при правильном подходе для MVVM в коде для view, ничего, кроме InitializeComponent() быть не должно.
Вот и возник вопрос.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37105436
KirillMedvedev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте подумаем. В классическом MVVM ViewModel не должна зависеть от View. То есть не содержать на нее прямых ссылок. VM, по происшествию какого-то события, должна оповестить кого-то, что View должна быть создана и зажечь её. Так как VM не зависит от View, то должен быть некто Mediator, который способен разрулить подобную ситуацию и взять на себя ответственность порождения окна и подсовывания туда модели. Этот Mediator, в идеале, должен жить в каком-то фреймворке, получать события и делать свою работу. Но, опять таки, всё зависит от архитектуры, от самого домена, от вариантов вариационности поведения приложения с пользователем, и тд и тп. Зная это, можно решить, каков будет операционный слой, или достаточно просто подкачивать данные во ViewModels из сервисов, возложив многие обязанности на них, а также понять, где будет жить домен, и кто будет посылать события (или дергать интерфейсные методы) этого медиатора (да и кто им будет впринципе). К тому же, существуют всякого рода MVVM фреймворки caliburn, mvvmlight, ...)
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37106359
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlsafпри правильном подходе для MVVM в коде для view, ничего, кроме InitializeComponent() быть не должно.

Кто тебе такую ерунду сказал? В codebehind у View может быть любая логика, являющаяся частью модели представления. В том числе и обработчик, прикручиваемый к событию VM, и отображающий модальное окно. Как-то так.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37106399
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Верблюдvlsafпри правильном подходе для MVVM в коде для view, ничего, кроме InitializeComponent() быть не должно.

Кто тебе такую ерунду сказал? В codebehind у View может быть любая логика, являющаяся частью модели представления. В том числе и обработчик, прикручиваемый к событию VM, и отображающий модальное окно. Как-то так.
А тебе кто такую ерунду сказал, что у vm должны быть события?
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37106457
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iА тебе кто такую ерунду сказал, что у vm должны быть события?

Где я говорил что "должны"?

Поциент путаецо в показаниях (ц)
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37108025
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верблюд,

че испугался окрика? событие бывает даже у тех, у кого их не должно быть, то что их у них нет то же событие , которое фиксирует гиннес
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37108131
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KirillMedvedevДавайте подумаем. В классическом MVVM ViewModel не должна зависеть от View. То есть не содержать на нее прямых ссылок.Как раз тот случай, когда проще забить на "классику" и добавить в МодельМорды ссылку на Морду. Можно вынести МодельМорды окна в отдельный класс со ссылкой на окно. Сделать несколько таких классов в зависимости от нужных типов диалогов (с кнопкой "закрыть", с кнопками "применить" и "отмена", и т. п.).
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37108152
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Алексей КKirillMedvedevДавайте подумаем. В классическом MVVM ViewModel не должна зависеть от View. То есть не содержать на нее прямых ссылок.Как раз тот случай, когда проще забить на "классику" и добавить в МодельМорды ссылку на Морду. Можно вынести МодельМорды окна в отдельный класс со ссылкой на окно. Сделать несколько таких классов в зависимости от нужных типов диалогов (с кнопкой "закрыть", с кнопками "применить" и "отмена", и т. п.).

И в итоге получим полный говнокод с утечками памяти(сейчас, как раз подобный наблюдаю).
В wpf вагон и маленькая тележка вариантов, которые позволяют обойтись без View в ViewModel и событий с обработчиками.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37108341
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iИ в итоге получим полный говнокод с утечками памяти(сейчас, как раз подобный наблюдаю).Главное что SRP не нарушен. А утечки памяти - это уже дело техники.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37112855
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я сделал свой собственый вариант , можно как вариант воспользоваться PRISM библиотекой.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37112962
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
CalabongaЯ сделал свой собственый вариант , можно как вариант воспользоваться PRISM библиотекой.

Собственный вариант пригоден только для статьи в блоге
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37244643
Calabonga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i,

ключевое слово "пригоден" :)
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37245223
Руки-крюки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В коде вьюхи, которая создает дочернее окно:
Код: plaintext
1.
2.
3.
4.
5.
void button_click(object sender, EventArgs e)
{
        Window w = new Window();
        w.DataContext = DataContext;
        w.ShowDialog();
}

профит
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37250752
aaallleeexxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vlsaf,

Кирилл все правильно написал, я просто хочу добавть, что MVVM, как паттерн, отвечает только за state своей вьюхи. Не надо считать его единственным паттерном. Композицией вьюх (или models), или переходами между ними (типа вызова диалога или навигацию в другое окно и обратно) должны заниматься другие классы. Там свои паттерны, которые, в отличие от MVVM, очень сильно зависят от выбранной модели навигации (single view, tab view, mdi, docking), и поэтому не сильно формализованы.

Но в целом, как пишет Кирилл, в приложение должен быть mediator, который обеспечивает передачу сообщения между различными VM и application services. Одним из этих app services является сервис осществляющий навигацию между vm. Когда медиатор передает ему сообщения, что vm хочет открыть такой диалог, он его открывает и результат передает в вызвающий vm.

Написание навигационного сервиса вообще говоря не так уж просто, поэтому, если у вас приложение из одного окна, в котором надо вызвать простой диалог - лучше MVVM вообще не использовать.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37250757
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aaallleeexxxлучше MVVM вообще не использовать.
+1

Сто раз уже дискутировали - полностью несъедобный паттерн для реальных условий. Абсолютно верно заметили про "медиатор" (он же контроллер или презентационный слой, если в терминах MVC / MVP), поддерживаю.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37250775
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
МСУaaallleeexxxлучше MVVM вообще не использовать.
+1

Сто раз уже дискутировали - полностью несъедобный паттерн для реальных условий. Абсолютно верно заметили про "медиатор" (он же контроллер или презентационный слой, если в терминах MVC / MVP ), поддерживаю.
Минус архитектор, ну и каша у тебя в голове. Медиатор обозвать контроллером! Проводи больше времени в своей библиотеке
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37250793
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iМедиатор обозвать контроллером!
Как ты был двоешником, так ты им и остался в жизни.

MVC



Самый что ни на есть посредник, который имеет право напрямую юзать модель и представление.

Контроллер == Поведение. Поведение может быть чем угодно, в том числе и медиатором. MVC - более абстрактный паттерн, от которого идут унаследованные практики, например, такие, как MVP.

Мы все прекрасно помним, как ты недавно отжигал с паттернами: 10597052 .

(c)узнаваем: ссылки не в тему, помешательство на шаблонах и т.д.

P.S. Сева, берись за голову, серьезно. Быть дурачком-клоуном в таком возрасте - признак даунизма.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37250904
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Муся, еще совсем недавно ты тут надрывался, что крутые разработчики сразу начинают говнокодить с обработчиками и паттерны с фреймворками тебе не нужны. Сначала попробуй применить хотя бы один по делу, а потом уже смеши народ, надувая щеки с умным видом.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37251015
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как лихо ты соскочил с темы медиатора и контроллера.

P.S. Для танкистов еще раз повторю про обработчики - они чудесно закладываются в средний слой (коде-бехайнд, кодогенерированный) и преспокойно себе взаимодействуют с моделью, которая в свою очередь через датаконтекст может повлиять на представление. Если уж сильно захочется - и на саму модель тоже (случай модальных окон и прочих жизненноважных ценностей). Тем самым получаем чудесную смесь MVVM и MVC. Поняла твоя тупа головушка, али будешь продолжать биться, что MVVM наше фсё?
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37251017
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЕсли уж сильно захочется - и на саму модель представление тоже
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37251034
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А накой нужна технология, при использовании которой вывод окошка превращается в проблему?
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37251042
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
МСУКак лихо ты соскочил с темы медиатора и контроллера.

P.S. Для танкистов еще раз повторю про обработчики - они чудесно закладываются в средний слой (коде-бехайнд, кодогенерированный) и преспокойно себе взаимодействуют с моделью, которая в свою очередь через датаконтекст может повлиять на представление. Если уж сильно захочется - и на саму модель тоже (случай модальных окон и прочих жизненноважных ценностей). Тем самым получаем чудесную смесь MVVM и MVC. Поняла твоя тупа головушка, али будешь продолжать биться, что MVVM наше фсё?
Муся, продемонстрируй этот говнокод для диалогов, а я тебе потом покажу минимум два варианта без привычного тебе ковыряния в обработчиках.
Без хирургического вмешательства с трепанацией ты не поймешь, что MVVM - это паттерн, а не фреймворк с навигацией.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37251050
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
ИзопропилА накой нужна технология, при использовании которой вывод окошка превращается в проблему?
Эти "проблемы" давно уже решены. Единственное, что нужно - прочитать книгу, да посмотреть хотя бы один нормальный фреймворк
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37253186
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилА накой нужна технология, при использовании которой вывод окошка превращается в проблему?Отличная разминка для мозга.
...
Рейтинг: 0 / 0
Как сделать модальное окно в MVVM?
    #37303809
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилА накой нужна технология, при использовании которой вывод окошка превращается в проблему?
+1
Piece of shit
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как сделать модальное окно в MVVM?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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