|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
WPF Заполнение вкладок TabItem данными из БД WPF03.05.2021, 21:07. Показов 9022. Ответов 66
Опирался на пост Вывод данных из БД в разные TabItem
Допустим, есть база данных с таблицами "Уровень", "Вопросы", "Теория" и "Главы", связи все настроил. Также есть проект WPF с окном, на котором расположены два TabItem'а, на которых располагаются поочередно теория и вопросы к ней. Допустим, человек выбирает какую-нибудь главу, к которой в бд относятся какая-нибудь теория и вопросы к ней. Ему выводится теория на первой вкладке, а за ней на второй (или условно третьей и четвертой) отображаются задания. Была мысль выводить теорию с помощью элемента WebBrowser, просто открывая различные html страницы, однако вариант с бд кажется интереснее. Если есть какие-либо замечания по спроектированной базе данных - буду рад выслушать!
0
|
|
| 03.05.2021, 21:07 | |
|
Ответы с готовыми решениями:
66
Переключение вкладок в tabcontrol при клике на элемент внутри tabitem Wpf скрыть TabItem у TabControl WPF Custom TabItem in TabControl - UserControl vs ControlTemplate (DataTemplate) |
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 14.05.2021, 16:17 [ТС] | |
|
Элд Хасп, Здравствуйте! Все необходимые работы, вроде как, сделаны. Единственное что только необходимо сразу сказать - проект работает на .NET 5. Кинул Вам повторное приглашение на соавторство, поскольку пересоздавали репозиторий по некоторым обстоятельствам
0
|
|
|
Модератор
|
||
| 15.05.2021, 15:12 | ||
|
Посмотрел Реп. Вы разделили на два проекта. В одном Репозиторий в другом View и ViewModel. Где собираетесь реализовывать Model? Можно в отдельном проекте, можно добавить в Репозиторий. Что нам нужно от Модели: 1) Метод возвращающий все уровни и их названия (Title); 2) Метод возвращающий описание (Descriptor) уровня по его Id; 3) Метод возвращающий все вопросы уровня с их названиями (Title); 4) Метод возвращающий описание (Descriptor) вопроса по его Id; 5) Метод получающий ответы на все вопросы уровня и возвращающий оценку. Модели Репозитория не должны использоваться для уровня Model-ViewModel. Но для упрощения можно так сделать. Но можно и создать DTO или использовать кортежи. На мой взгляд - кортежи это оптимально для этой задачи.
0
|
||
|
78 / 67 / 13
Регистрация: 04.10.2018
Сообщений: 330
|
|
| 15.05.2021, 15:25 | |
|
Элд Хасп, Добрый день, это я разделил на два проекта. Так как считаю работу с БД лучше реализовывать так, а далее работать с данными только с Dto.
У меня к вам вопрос я привык использовать Service в моем понимании Service это место где мы делаем некие действия с данными Dto это что то похожее на Model? или видимо я Model путаю с Service.
0
|
|
|
Модератор
|
|||
| 15.05.2021, 16:39 | |||
|
Тогда лучше Модель тоже разместить в Репозитории. В ней не будет никакой Бизнес Логики, только работа с Репом и передача данных в VM. DTO как мне кажется для данной задачи проще реализовать на кортежах. В каждом типе 1...3 свойства (или поля). Не вижу необходимости ради этого в построение целой кучи специальных классов. Добавлено через 4 минуты К View относится реализация самого GUI. К VM состыковка View и Модель, в том числе различные типы предназначенные для представления в GUI, конвертация типов Модели в эти типы, какие-то сервисы этого уровня. Добавлено через 2 минуты То есть это зависит от того что делает с DTO ваш сервис. Если он преобразует иммутабельный DTO в какой-то мутабельный тип с дополнительными свойствами для использования в GUI - это уровень VM. Если же он работает с Репозиторием и преобразует его сущности (модели) в DTO и обратно - это уровень Модели. Добавлено через 4 минуты Сам по себе DTO тип не относится к какому-то определённому уровню. Пример, string - можно рассматривать DTO класс. К какому уровню он относится? Ни какому и его можно использовать всюду. Или типы Point, Size, Rect - их так же можно использовать где угодно. Добавлено через 3 минуты Varyna, но в данном случае, как мне кажется, для упрощение понимания MVVM, лучше создать специальный тип (например, TestModel) и уже под его оболочкой, если нужно, обращаться к сервисам. Тогда в основном проекте будет создан один экземпляр Модели и VM будет работать только с ним. А все детали будут инкапсулированы за этой оболочкой.
2
|
|||
|
78 / 67 / 13
Регистрация: 04.10.2018
Сообщений: 330
|
|
| 15.05.2021, 16:49 | |
|
Элд Хасп, Спасибо за развернутый ответ! Я на все 100 согласен!
0
|
|
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 16.05.2021, 15:23 [ТС] | |
|
Элд Хасп, Здравствуйте! Думаю, что кортежи вполне подойдут для данного примера
0
|
|
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 16.05.2021, 19:21 [ТС] | |
|
Элд Хасп, Признаться честно, я с моделями еще на "Вы", вряд ли справлюсь сам
0
|
|
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 16.05.2021, 20:41 [ТС] | |
|
Элд Хасп, Мне кажется, если мы хотим сэкономить время, то будет проще Вам сделать
0
|
|
|
Модератор
|
||
| 16.05.2021, 21:04 | ||
|
Возможно получится завтра, но не обещаю. Добавлено через 1 минуту Как то отвечать со смарта могу, но вот ком даже времени включить нет.
0
|
||
|
78 / 67 / 13
Регистрация: 04.10.2018
Сообщений: 330
|
|
| 17.05.2021, 03:29 | |
|
Элд Хасп, У меня пока с временем проблеммы. Лучше вам сделать.
0
|
|
|
Модератор
|
|||||||||||||
| 17.05.2021, 09:24 | |||||||||||||
|
kMOD, сделал фиксацию:
Я изменил названия классов сущностей, но БД не проверял - не знаю подхватится автоматически или нет. Если будут ошибки надо внести в БД изменения. Пока посмотрите что сделано - будут вопросы задавайте. Как разберётесь - перейдём к созданию View и интерфейсов VM. Добавлено через 1 секунду kMOD, сделал фиксацию:
Я изменил названия классов сущностей, но БД не проверял - не знаю подхватится автоматически или нет. Если будут ошибки надо внести в БД изменения. Пока посмотрите что сделано - будут вопросы задавайте. Как разберётесь - перейдём к созданию View и интерфейсов VM.
0
|
|||||||||||||
|
Модератор
|
||||||||||||||||||||||||||||||||
| 17.05.2021, 13:32 | ||||||||||||||||||||||||||||||||
|
kMOD, по архитектуре View предполагаю три страницы:
1) Выбор уровня; 2) Вкладки с вопросами уровня. На каждой вкладке описание вопроса и поле для ввода ответа; 3) Получение результата теста: сколько правильных ответов из общего количества вопросв. Само окно будет состоять из кнопки навигации (начать тест, получить результат, начать сначала) и региона для отображения страницы. Теперь по интерфейсам VM: 1) Интерфейс одного уровня: Id, Title, Descriptor; 2) Выбранный уровень: одно свойство SelectedLevel; 3) Производный от 2 для выбора уровня: коллекция уровней и команда получения вопросов уровня; 4) Интерфейс одного вопроса: Id, Title, Descriptor, Answer; 5) Производный от 2: коллекция вопросов уровня и команда получения результата по тесту; 6) Производный от 2: количество вопросов уровня и количество правильных ответов и команда перехода к выбору уровня. Добавлено через 2 часа 0 минут Сделал фиксацию:
0
|
||||||||||||||||||||||||||||||||
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 17.05.2021, 15:08 [ТС] | |
|
Элд Хасп, Ого, как много всего
Есть что изучить)
0
|
|
|
Модератор
|
||||||||||||||||||||||
| 17.05.2021, 15:12 | ||||||||||||||||||||||
|
kMOD, сделал фиксацию:
0
|
||||||||||||||||||||||
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|
| 17.05.2021, 19:09 [ТС] | |
|
Элд Хасп, Прошу прощения за, быть может, слишком глупый вопрос, но что надо будет сделать в случае динамического заполнения вопросов из бд? То есть, к примеру, если я не в коде создаю пару экземпляров вопроса и пару экземпляров уровня, а хочу взять их столько, сколько у меня их описано в базе данных
Возможно, я что-то не так понял
0
|
|
|
Модератор
|
|||
| 17.05.2021, 19:31 | |||
|
Такие данные называются "Контекст Данных Времени Разработки". Когда вы разрабатываете Окна, UserControl (как в данном случае) и др., то вам не к чему задавать привязки. В результате все элементы пустые и вы не видите реального дизайна, компилятор (IntelliSense) выдаёт предупреждения об ошибках привязок. Обратите внимание на префикс d: - это означает что задание значения будет игнорироваться при запуске на исполнение.Когда Разработка View будет завершена у нас в результате будет набор интерфейсов которые должна реализовать VM. VM - это слой посредник. И реализовывать её лучше после реализации Model и View. Тогда гораздо проще понять как и что надо состыковывать между собой. Добавлено через 1 минуту VM будет запрашивать через методы Модели нужные данные.
0
|
|||
|
2 / 2 / 0
Регистрация: 03.05.2021
Сообщений: 26
|
|||
| 17.05.2021, 19:36 [ТС] | |||
|
Элд Хасп,
0
|
|||
| 17.05.2021, 19:36 | |
|
Наведение курсора на TabItem и как менять фон при нажатии на другой TabItem Программное создание tabItem по образцу другого tabItem с контролами
Drop drag wpf перетаскивание вкладок ошибка Таб контроль: заполнение вкладок и их создание по заданному набору названий Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
|
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи.
. . .
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|