|
1 / 1 / 0
Регистрация: 06.10.2018
Сообщений: 6
|
||||||
WPF Оконное приложение с учётом MVVM. Алгоритм конструирования для латунных чайников30.01.2019, 19:52. Показов 5280. Ответов 9
В продолжение своих попыток допилить утилиту, задуманную давно, но подвешенную в список "не срочно" надолго - дошёл до критической точки в понимании, что нельзя просто взять черновик программы на java и сделать из этого рабочее приложение на wpf, и всё потому, что я делаю это неправильно.
Решил попробовать вернуться в самое начало и разобраться с вещами, которые не прижились с наскока в моём представлении о том как оно должно бы быть. Проблем с рабочей логикой нет, это вещи не слишком зависимые от языка и структуры приложения. Потому решил для себя сформировать от начала алгоритм создания приложения, правильный с точки зрения философии wpf. Основную часть бизнес-логики опускаю из примеров для наглядности, и прошу всех проходивших мимо, но задержавшихся разбирающихся в сабже, по возможности откритиковать получающийся алгоритм. Конкретизация постановки задачи: Оконное приложение для создания, сохранения в файл, просмотра и редактирования файлов, содержащих в XMS объект класса Profil Ориентируемся на MVVM модель-представление-модель представления Начинаем от модели 1. Создаём класс Profile.cs со всеми полями необходимыми для писания объекта и методами для изменения объекта всеми необходимыми образами
3. Создаём MainWindow и закладываем основу макета окна 4. Работа в процессе Coming soon
0
|
||||||
| 30.01.2019, 19:52 | |
|
Ответы с готовыми решениями:
9
Создать оконное приложение для численного интегрирования Оконное приложение для работы с базой данных MS Access Cоздать оконное приложение для работы с углами на плоскости |
|
1 / 1 / 0
Регистрация: 06.10.2018
Сообщений: 6
|
||||||||||||
| 31.01.2019, 18:29 [ТС] | ||||||||||||
|
Дополняя пункт два началом класса, описывающего модель:
2. Создаём класс модели public class TPPDModel.cs, в качестве поля создаем рабочий экземпляр класса Profil profil, в качестве методов всё необходимое для работы с файлом и преобразования объекта в xml и обратно.
Откуда в методе модели возьмётся это самое имя файла, правильно ли я понимаю что оно - часть представления, которое mVvm, и должно быть что-то типа
Ну и в догонку: а что в WPF вместо MessageBox?
1
|
||||||||||||
|
Модератор
|
||||
| 31.01.2019, 20:37 | ||||
|
Если имя файла статично и жёстко связанно с данными (настройки, БД, инет-ссылка и т.п.), то его можно прописать в Модель. Если имя файла меняется пользователем, то оно должно задаваться из View. При этом диалоги OpenFileDialog и SaveFileDialog это тоже View. Поэтому можно через них задавать.
2
|
||||
|
Модератор
|
||
| 31.01.2019, 20:59 | ||
|
Типы проектов: View - WPF приложение Консоль - консольное приложение View библиотека, ViewModel, VM библиотека, Model, Model библиотека - библиотека классов. Если используете UC элементы, создайте для них восьмой проект типа Библиотека WPF элементов.
3
|
||
|
Модератор
|
|
| 31.01.2019, 21:41 | |
|
ImedaParishvili, и ещё. Посмотрел Вашу реализацию класса TppdModel. В Модели категорически не должно быть ни какого взаимодействия с пользователем!
В том числе вывода сообщений об ошибках. Представьте, что Модель работает на стороннем сервере. Что, куда, и для кого она будет выводить? Просто генерируйте ошибку, а обрабатывайте её в VM. Добавлено через 3 минуты Я сам делал подобную ошибку и меня поправили в своё время. Посмотрите пост #11 в теме Пример реализации WPF+MVVM приложения в цикле Готовые решения, примеры и рекомендации начинающим на WPF [Элд Хасп]
2
|
|
|
1 / 1 / 0
Регистрация: 06.10.2018
Сообщений: 6
|
|
| 01.02.2019, 10:17 [ТС] | |
|
Вечером подумаю над этим более разумно, но сходу кроме жалоб на тяжкую судьбу ещё вопрос:
Если делить всё на кучу проектов (я начинал в sln один проект в котором сложено всё) то в чём заключается логика выделения различных Model и ModelLib. И то и то - библиотеки классов, описывающие моделируемое программой сущность. Какие классы куда и зачем их несколько вообще?
0
|
|
|
Модератор
|
|||
| 01.02.2019, 11:15 | |||
|
Когда у Вас твердо сложится понимание, что к какой части принадлежит, что откуда доступно, постоянное следование такой схеме будет необязательно. Порой для очень частных случаев всё MVVM помещают в один класс или файл. Но нужно держать в голове чёткое понимание того, где данные, где их отображение и где методы согласующие данные с отображением. Поэтому на начальном этапе обучения, советую всегда явно разделять все части MVVM по предложенной схеме. Сама реализация начинается с Модели и её отладку надо делать в консольном приложении. Когда модель будет отлажена, то создать View и ViewModel DataDesigner (Модель представления времени разработки - далее VMDD). После создания View создаёте ViewModel как наследника от VMDD и прописываете там необходимые методы для связи с Моделью. Кроме компиляции, так просто удобнее. Даже в небольших решениях порой возникает очень много классов. И просто держать их в одном проекте одной кучей - неудобно, трудно находить, то что нужно. Дополнительно даже в рамках проекта ещё и папки в них создаются. А в реальных приложениях, для работы с реальными классами - количество классов очень большое. Вот сейчас пишу небольшое приложение для работы с биржей. Так классов набралось уже под сотню. Если их держать в одном проекте - то чёрт ногу сломит. Вам же это пригодится в учёбе для получения необходимого в дальнейшем опыта. На уровне ViewModel есть ещё и другой фактор. View ссылается на классы VM. Но VM создаётся позже View. Так на что ссылаться View? Даже, указанный выше класс VMDD где создавать? Единственное место это ViewModel библиотека. Потом уже ViewModel будет или использовать эти классы или создавать собственные как наследников от этих классов.
1
|
|||
|
1 / 1 / 0
Регистрация: 06.10.2018
Сообщений: 6
|
||
| 05.02.2019, 18:39 [ТС] | ||
|
Осталось понять что из себя должно представлять то консольное приложение.
0
|
||
|
Модератор
|
|||
| 05.02.2019, 22:08 | |||
|
Добавлено через 58 минут Консольное приложение - это консольный проект. Что в нём может быть не понятного? Допустим. Модель состоит у Вас из трёх свойств принимающих два операнда и код операции над ними, одного события сообщающего об изменении результата операции и метода возвращающего результат. Консольное приложение выводит меню из трёх пунктов: - первый операнд - второй операнд - оператор При вводе любого из них, они отправляются в Модель. Но результат не считывается. И нужно сделать "прослушку" события модели. Если результат изменился - он автоматически должен быть выведен на консоль.
1
|
|||
| 05.02.2019, 22:08 | |
|
Помогаю со студенческими работами здесь
10
Как правильнее описывать сервисы с учетом MVVM? Приложение для вычисления стоимости покупки с учетом скидки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|