|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
|
Пример вызова нового окна или сообщения MVVM21.07.2016, 10:22. Показов 7231. Ответов 17
Метки нет (Все метки)
привет форумчане, знаю, что тема заезжена и все такое, но тем не менее..
у меня есть маленький пример проекта, в котором я разбираюсь с чистым паттерном mvvm. Там все просто, есть главное окно с меню слева и с тулбаром. по клику на меню, в главное окно подгружаются различные юзер контролы (в данном примере 2 wpf контрола и 1 winForms, который должен хоститься в главное окно. Тут оговорюсь, не знал где делать его вызов, не нарушив логику MVVM. оставил в модели окна, правда обычно вызывал в коде самого окна, но не в этом суть). в общем собственно к вопросу... в этом примерчике есть 2 меню, при клике на которые: 1. клик по меню Окно - создается новое окно и отображается на экране (Window w = new Window(); w.Show() ![]() 2. клик по меню Сообщение - отображение какого-нибудь сообщения на экране, скажем MessageBox.Show("Данная функция недоступна"); кому не трудно, изменить мой пример так, чтобы это работало. Перечитал кучу информации на различных форумах, да и здесь тему создавал. В основном советуют использовать стороннюю библиотеку PRISM, но 1. не понимаю как ее использовать, ибо так и не встретил простого примера ее работы 2. сторонние библиотеки у нас не приветствуются, поэтому должно работать стандартными средствами. проект прилагается. Заранее благодарен
0
|
|
| 21.07.2016, 10:22 | |
|
Ответы с готовыми решениями:
17
Вызов окна из другого окна. Паттерн MVVM функция для вызова нового окна |
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
||||||
| 25.07.2016, 10:27 | ||||||
|
Вот переделал немного.
По существу, вот весь код, что я добавил:
0
|
||||||
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
|
| 25.07.2016, 10:29 | |
|
По поводу Prism смотрите сами, если планируется большой проект, тогда может есть смысл его использовать, а если проект не большой, то думаю игра не стоит свеч =) Но как минимум для саморазвития освоить призм думаю лишним не будет.
0
|
|
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
|
| 25.07.2016, 13:46 [ТС] | |
|
Cuguyc,
то что вы написали нарушает логику mvvm или я что-то неправильно понимаю??? ведь viewmodel не должна "видеть" свой view. ) видимо я неправильно выразился при написании темы.
0
|
|
|
|
||
| 25.07.2016, 20:40 | ||
|
WinForm убрать и запихнуть всё в ElementHost контрол.
0
|
||
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
||||||
| 26.07.2016, 08:39 | ||||||
|
hamin, А в каком месте Viewmodel видет свой View?
Там, где мы создаем окно, мы указываем во viewmodel создание нового окна, но у нового окна будет уже свой viewmodel, который мы подцепим при инициализации элемента usercontrol, не вижу тут нарушений MVVM, так как ViewModel создает совершенно новое окно со своим блекджеком и view'шками. Добавлено через 5 минут
Вроде всё сходится =) ViewModelMainWindow ничего не знает про MainWindow MyUserControlViewModel ничего не знает про MyUserControl
0
|
||||||
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
|
| 26.07.2016, 10:14 [ТС] | |
|
Cuguyc,
т.е. то, что вьюмодель главного окна знает о вью какого-то дочернего окна - это нормально? тогда не вижу никакого смысла в mvvm Добавлено через 5 минут skilllab, пример, который вы скинули оперирует с юзерконтролами и подгружает их в главное окно, в зависимости от выбранного меню слева. Это то я как раз и понимаю, что и показано у меня в проекте) мне нужно именно открытие дочернего окна и вывод сообщения на экран в рамках mvvm Добавлено через 7 минут вот примерно такая же проблемка и ответ снизу, тогда вопрос, в чем плюсы такого подхода?
0
|
|
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
|
| 26.07.2016, 11:36 | |
|
hamin, Ну если уж строго следовать модели MVVM, то пишем класс Бизнес логики и в нём уже реализуем вызов окна, а в Классе ViewModel просто создаем объект класса Бизнес логики и у него вызываем метод создания окна, профит=)
Добавлено через 4 минуты По хорошему вообще вся логика приложения должна быть вынесена в отдельный класс, а ViewModel будет прослойкой между Представлением и классом логики, это как я это понимаю. Добавлено через 37 секунд Может я в чём-то ошибаюсь, если кто поправит, буду признателен =)
1
|
|
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
||||||
| 26.07.2016, 13:11 [ТС] | ||||||
|
Cuguyc,
вот это уже ближе к истине. Что тогда представляет из себя класс бизнес логики?? т.е. это по сути то, что я нашел на просторах интернета? Кликните здесь для просмотра всего текста
0
|
||||||
|
|
|||
| 26.07.2016, 14:25 | |||
CreateNewWindow можно запихать всё что душе угодно. Хоть новое окно, хоть контрол.
1
|
|||
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
|
| 26.07.2016, 15:56 [ТС] | |
|
всем спасибо за ответы, буду разбираться!
0
|
|
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
||
| 26.07.2016, 16:53 | ||
|
ИМХО для построения удобно тестируемого приложения нужно разносить на слои все части приложения, сейчас я пробую в своём проекте View и ViewModel запихнуть в Presentation Layer, логику приложения в Buisness Layer, ну и работу с данными в т. ч. Model в Data Access Layer. Главное во всём этом не запутаться =)
0
|
||
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
|
| 27.07.2016, 13:04 [ТС] | |
|
раз уж такое дело пошло, давайте добивать.
скажем у меня есть главное окошко с 3 меню. по клику на каждое из таких меню открываются разные окна, скажем: myWindow1, myWindow2, myWindow3. тогда мне нужно создавать интерфейс как в примере выше с 3 методами? ну или делая грабли, в метод добавить переменную, с помощью которой можно было бы определить какое окно вызывать, скажем вью модель и по ее типу определять какое окно подгружать
0
|
|
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
|
| 27.07.2016, 16:29 | |
|
Я думаю, что всё зависит от задачи. Если Вам нужно будет делать много окон(в чем я сомневаюсь, потому что это не совсем удобно), то лучше заморочиться и сделать интерфейсы, а если нет, то я бы обошелся малой кровью ибо зачем усложнять и нагружать проект классами и интерфейсами, где от них реальной пользы толком не будет, только больше кода и куча классов. Ну это моё лично мнение))
1
|
|
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
||||||
| 28.07.2016, 09:54 [ТС] | ||||||
|
ну и последний вопрос. как я понимаю, с сообщениями тоже самое:
0
|
||||||
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
||||||||||||||||
| 28.07.2016, 13:07 | ||||||||||||||||
|
Вы в коде создаете объект интерфейса?
Если уж хотите всё разносить и даже MessageBox то сделайте статический класс с нужным Вам методом, тогда и объект создавать не надо. Надо короче всё собрать во едино. Вот как бы сделал я: Есть мои слассы View, они цепляются к ViewModel (но используют поля Model) Сейчас поясню, то есть во ViewModel мы просто объявляем объект модели, а привязка идет из View через точку объекта. Далее все команды привязываем к методам ссылающимся на методы класса бизнес логики. То есть я не пишу методов в ViewModel а комманды сразу направляю на нужные методы класса бизнесс логики
Далее в классе бизнес логики мы можем спокойно вызывать любые окна. Далее нужно смотреть по конкретной ситуации, я думаю не стоит нагружать проект лишним кодом, будет плохо читаться. По сути код который Вы написали выше просто обертка на MessageBox я бы на просто написал бы в классе бизнесс логики просто MessageBox.Show("HelloWorld");
1
|
||||||||||||||||
|
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
|
||
| 28.07.2016, 13:41 [ТС] | ||
|
Cuguyc,
в общем суть я уловил, а как будем делать - будем посмотреть. спасибо за помощь!
0
|
||
|
44 / 44 / 16
Регистрация: 02.06.2016
Сообщений: 95
|
|
| 28.07.2016, 15:07 | |
|
hamin, Рад помочь, порой обсуждая ту или иную ситуацию приходишь к новым для себя решениям
0
|
|
| 28.07.2016, 15:07 | |
|
Помогаю со студенческими работами здесь
18
Функция для вызова нового окна с консольным приложением Выкачать файл без открытия нового окна или вкладки с выбором места сохранения Прошу пример MVVM реализации
Пример вызова подпрограммы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|