|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|||||||||||
ViewModel: RelayCommand и метод12.02.2020, 17:11. Показов 2069. Ответов 18
Метки нет (Все метки)
Привет всем,
Элд Хасп, Я закрывал окно в Сode Behind таким образом. Теперь использую ViewModel.
0
|
|||||||||||
| 12.02.2020, 17:11 | |
|
Ответы с готовыми решениями:
18
Mvvm ViewModel в ViewModel
|
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||||||||||||||||
| 12.02.2020, 17:23 | ||||||||||||||||
|
ViewModel:
3
|
||||||||||||||||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 12.02.2020, 17:33 [ТС] | |
|
Ё моё! вот это замутки. Проще оставить как есть.
И я не вижу чтобы использовалась Command.
0
|
|
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|
| 12.02.2020, 17:40 | |
|
Команда и не используется. Используется связка - (event во ViewModel)->(Trigger)->(TriggerAction)
1) Во ViewModel вызываем event 2) Trigger, подписавшись на этот event, отлавливает его и вызывает наш кастомный TriggerAction 3) TriggerAction выполняет нужные действия с View
1
|
|
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
||
| 12.02.2020, 17:58 [ТС] | ||
|
0
|
||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
|
| 12.02.2020, 18:00 | |
|
Где используется code behind? Я не написал ни одной строчки кода в *.xaml.cs
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 12.02.2020, 19:01 | |||
|
Добавлено через 47 секунд Манипулирование элементами интерфейса — самое место для code behind.
1
|
|||
|
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
|
||
| 12.02.2020, 19:17 | ||
|
1
|
||
|
Модератор
|
||
| 12.02.2020, 19:30 | ||
|
Само по себе закрытие окна это метод View или уровня выше - App. Поэтому, если надо закрыть окно не производя ни каких действий с данными, то как написал kolorotur, вполне допустимо и даже лучше задать это в Click кнопки. Если же закрытие окна - это реакция View на изменение данных, то тогда уже, конечно, вариант с CB не подойдёт. Решений множество в зависимости от деталей реализации. В варианте novikov.ea, в VM вызывается событие. На это событие подписывается или View, или App и уже они закрывают окно, если посчитают нужным. Что нельзя делать, однозначно, это закрывать окно из VM. Оно должно только уведомить (вызвать событие) о именении своего состояния. Кроме варианта со специальным событием RaiseCloseWindowRequested можно добавить в VM свойство и отслеживать его состояние через событие PropertyChanged. Отслеживать можно как с помощью EventTrigger (вариант от novikov.ea), так и реализовав подписку в CB Окна или App.
1
|
||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 12.02.2020, 19:42 [ТС] | |
|
0
|
|
|
Модератор
|
||||||||||||
| 12.02.2020, 20:22 | ||||||||||||
1
|
||||||||||||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|
| 13.02.2020, 09:26 [ТС] | |
|
Элд Хасп,
В соседнем классе нужно исполнить методы в соответствии со свойствами loaded/unloaded главного окна. Естественно есть вариант в Сode Behind это сделать через соответствующие события. Создать экземпляр класса, потом через него добраться к методам в классе. Есть варианты сделать это "по фэншую" и без лишних наворотов? Например прикрутить Command к свойствам главного окна. Синтаксис? В XAML?
0
|
|
|
Модератор
|
|||||||||||||||||||||||||||
| 13.02.2020, 09:45 | |||||||||||||||||||||||||||
|
Создание экземпляров Model, ViewModel, View, их настройка, задание связей между ними - это функции App. App - не является частью View. По сути, это должен быть даже отдельный проект, просто из-за малого количества кода в App, подобный фанатизм, не имеет смысла. Так же, если настройки и сложных связей нет, часто это делают в конструкторах Model, ViewModel, View. Вот пример App из того же приложения:
Если же моделей может быть несколько разных типов или между ними есть сложные связи то это тоже делает App. Вот пример из поста Пример создания приложения "Работа с комнатами в студенческих общежитиях" [WPF, SQLite, Элд Хасп] В App есть конструктор принимающий Модель
1
|
|||||||||||||||||||||||||||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
||
| 13.02.2020, 09:59 [ТС] | ||
|
Вся речь о MainWindow главное окно, других окон нет. Есть способ пропустить Loaded/Unloaded в соседний класс "по-фэншую". Фэншуй на картинке выше. Например я знаю как это делается с button. Цепляется Command в XAML. А здесь?
0
|
||
|
Модератор
|
|||
| 13.02.2020, 10:06 | |||
|
Если же перед закрытием надо произвести некоторые действия с данными, то тоже может быть несколько вариантов. 1) По кнопке должны быть произведены некоторые действия с данными. И закрытие окна это, по сути, не функция кнопки, а следствие вызванных изменений в данных. Тогда, конечно, это метод VM и и одно из решений предложил novikov.ea. 2) Закрытие по кнопке - это именно закрытие окна. Но после закрытия основного окна надо закрыть само приложение, а перед этим как-то модифицировать данные (сохранить, дождаться прекращения процессов и т.д.). Закрытие ПРИЛОЖЕНИЯ - это уже функция App. А App не является частью View (я только в предыдущем посте об этом написал). App "знает" всё обо всех и может для этого напрямую обратиться и в ViewModel и в Model иди ещё куда ему потребно. Добавлено через 4 минуты Можете в XAML подсоединить методы или команды ViewModel к соответствующим событиям Окна как показал novikov.ea. Но, скорее всего, у вас это не loaded/unloaded ОКНА, а открытие/закрытия ПРИЛОЖЕНИЯ. Поэтому, лично я бы, лучше все это организовал в App.
0
|
|||
|
-21 / 29 / 2
Регистрация: 17.03.2018
Сообщений: 778
|
|||||||||||||
| 13.02.2020, 10:10 [ТС] | |||||||||||||
|
имеете ввиду так?
0
|
|||||||||||||
|
Модератор
|
|||
| 13.02.2020, 14:29 | |||
|
Но по смыслу что это? События окна или приложения? Допустим, если бы у вас было несколько экземпляров MainWindow, то обрабатывать надо было бы события каждого экземпляра окна? Или только события при запуске (перед открытием первого окна) и завершении приложения (после закрытия последнего окна)? Добавлено через 2 минуты Из View идёт обращение к VM. Без разницы через привязки в XAML или явные вызовы методов в CB. В самой View может обрабатывать только состояния UI элементов, но никак не данных.
0
|
|||
| 13.02.2020, 14:29 | |
|
Помогаю со студенческими работами здесь
19
RelayCommand RelayCommand.cs не найден
RelayCommand и асинхронный код
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|