0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 7
|
||||||||||||||||
1 | ||||||||||||||||
WPF Активация окна из ViewModel07.03.2019, 12:49. Показов 2578. Ответов 7
Метки нет (Все метки)
Есть ли лучший способ сделать активацию окна из под ViewModel? (желательно не нарушая принципы MVVM)
MainViewModel.cs
0
|
07.03.2019, 12:49 | |
Ответы с готовыми решениями:
7
Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна? Открытие дочернего окна, передача данных между ViewModel-ями окон Как сделать при нажатии на кнопку (отправлении команды во ViewModel) Cursor.Wait у окна? (GalaSoft.MvvmLight) В одном окне используются 2 ViewModel. Вылетает исключение при создании окна |
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|||||||||||
07.03.2019, 13:19 | 2 | ||||||||||
Сообщение было отмечено Casper-SC как решение
Решение
Данный подход не нарушает MVVM. Но обычно принято, чтобы файлах *.xaml.cs оставался только конструктор с вызовом InitializeComponents. Поэтому всю логику следует выносить в Behavior'ы.
Нужно подключить System.Windows.Interactivity.dll Релизация:
1
|
Модератор
|
|
07.03.2019, 13:27 | 3 |
Ну, теоретически, VM не должна сама обращаться к View.
Пара вариантов:
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|||||||||||
07.03.2019, 14:50 | 4 | ||||||||||
Сообщение было отмечено Casper-SC как решение
Решение
Вы правы. Но в примере Serhiy_as ViewModel не обращается к View.
Свойство IsFocused имеет только get. А значит его нельзя изменить из ViewModel'и с помощью привязки. Не лучший вариант реализации. Запрос на активацию окна - это событие, значит ViewModel и должна посылать событие, а не изменять свойства. Вот предположим, мы реализовали это через изменение свойства. Что нужно писать в свойство? Каждый раз какие-то новые рандомные значения? Согласитесь, что это не годится для серьёзного приложения Добавлено через 58 минут А ещё лучше сделать через Interaction.Triggers: Отлавливаем событие ActivateWindow у DataContext'а
0
|
Модератор
|
||||||
07.03.2019, 15:37 | 5 | |||||
Да, действительно. Не пользовался, а проверить поленился. Моя ошибка.
Я думал
Или я ошибаюсь?
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
08.03.2019, 09:00 | 6 |
Да. При подписке на событие ViewModel будет хранить ссылку на View. Но это не нарушает уровни абстракции, так как ViewModel не будет знать о типе View. События как раз и существуют, чтобы на них могли подписываться объекты более высокого уровня абстракции, так как напрямую взаимодействовать с объектами более высокого уровня, не нарушая уровни абстракции, не получится.
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
08.03.2019, 17:12 | 8 |
PropertyChanged тоже можно использовать как уведомление на активацию окна. Но если есть конкретный сценарий с конкретной потребностью на активацию окна, то будет более ясным и очевидным сделать отдельное событие, которое будет иметь вполне ясное и чёткое имя, отображающее конкретную суть данного события.
1
|
08.03.2019, 17:12 | |
08.03.2019, 17:12 | |
Помогаю со студенческими работами здесь
8
Mvvm ViewModel в ViewModel Активация окна Активация окна формы Активация модального окна Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |