|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|||||||||||
Как создать иерархическое меню12.12.2019, 18:03. Показов 9918. Ответов 67
Метки нет (Все метки)
Уважаемые, гуру, застрял на создании иерархическом меню, помогите, а то голову сломал. Наверняка есть уже решение этого вопроса, чтобы не изобретать велосипед, подскажите способы создания иерархического меню.
Задача в следующем. Есть класс с товарами и есть класс с категориями товаров.
Данные храним в БД. Работа с БД осуществляется через EF через класс ModelContext. Структура кода xaml в принципе проста. Имеется меню, и два рабочих поля, в левом разместил TreeView в котором и нужно получить иерархическое меню категорий товара. А а правом окне нужно выводить товары принадлежащие выделенному пункту категории иерархического меню.
Я понимаю что нужно составить иерархическое дерево, для привязки его к TreeView, но как это сделать не могу врубиться. Примеров много пересмотрел, а вот идеи как лучше сделать не нашел.
0
|
|||||||||||
| 12.12.2019, 18:03 | |
|
Ответы с готовыми решениями:
67
Не получается создать иерархическое меню Иерархическое меню из четырёх кнопок. Как продумать логику реализации Иерархическое меню |
|
Модератор
|
||||||
| 20.12.2019, 10:51 | ||||||
|
AII, да.
Свойство состоит всего из коллекции с одним объектом CategoryVM. Как из экземпляра CategoryDTO получить экземпляр CategoryVM со всем деревом нижестоящих элементов , мы уже писали код выше. TreeView привязываете к этой коллекции и задаёте ОДИН шаблон для развёртки. Он будет наследоваться нижестоящими уровнями. Добавлено через 3 минуты AII, и методы слегка избыточны
AII, и в Модели очень редко имеет смысл использовать INPC. В данном случае у вас в свойствах две коллекции Категории и Товары. Но обе эти коллекции бессмысленно отслеживать на изменения. Лучше вместо свойств сделать Методы и убрать INPC.
0
|
||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|||
| 20.12.2019, 14:22 [ТС] | |||
|
Почему этот метод избыточен?
Добавлено через 1 минуту Или можно по другому как то? Добавлено через 5 минут
0
|
|||
|
Модератор
|
||
| 20.12.2019, 14:44 | ||
|
AII, я же показал.
Избыточен не сам метод, а инициализация им промежуточного списка. Этот список только занимает место и не нужен. Цикл сразу надо делать по возврату метода. Внимательнее посмотрите мои правки в коде метода. Добавлено через 1 минуту AII, для более детального ответа покажите код класса ModelContext Добавлено через 6 минут
Пока давайте "допилим" без них. А потом при необходимости добавим. Сейчас просто уберите свойства - закомментируйте их.
0
|
||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|||||||
| 20.12.2019, 14:44 [ТС] | |||||||
|
Мой ModelContext:
0
|
|||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
||||||||||||
| 21.12.2019, 15:30 [ТС] | ||||||||||||
|
Элд Хасп, добрый день!
Добавлено через 19 минут Получилось:
Я создаю метод и в нем вызываю все значения:
0
|
||||||||||||
|
Модератор
|
|||||||||||
| 22.12.2019, 12:33 | |||||||||||
|
AII, примерный код извлечения дерева из Model
К свойству CategoriesTree можно привязать TreeView.
0
|
|||||||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
||||||
| 23.12.2019, 08:45 [ТС] | ||||||
|
Привязался :
0
|
||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
||||||
| 23.12.2019, 08:57 [ТС] | ||||||
|
Убрал избыточный код:
0
|
||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|
| 23.12.2019, 09:21 [ТС] | |
|
Отредактировал значения в БД, все шикарно работает:
0
|
|
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|
| 23.12.2019, 09:31 [ТС] | |
|
А как сделать что бы при выборе категории отображались товары только этой категории, через события?
0
|
|
|
Модератор
|
|
| 23.12.2019, 09:42 | |
|
AII, у TreeView есть свойство только для чтения - SelectedItem.
Привязку VM к нему делаете через Behavior. Мой вариант Behavior для привязки свойств только для чтения [WPF, Элд Хасп] В свойстве VM вы получите выделенную категорию. У категории есть свойство со списком её товаров.
0
|
|
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|
| 23.12.2019, 10:30 [ТС] | |
|
Behavior - Как я прочел, это класс в студии, как его подключить? Почему то студия его не видит.
0
|
|
|
Модератор
|
||||||
| 23.12.2019, 11:23 | ||||||
|
AII, надо подключить System.Windows.Interactivity.dll.
Это Библиотека на GitHub сейчас. Добавлено через 8 минут AII, можно и без Behavior. К TreeView подключаете обработчик на SelectedItemChanged. В обработчике приводите выделенный элемент к нужному типу и присваиваете свойству ViewModel. Допустим, тип ViewModel имеет такое же названием. И в нем свойство CategoryVM SelectedCategoryТогда в обработчике код
Behavior делает тоже самое, только код инкапсулирован и может применяться в XAML к любым свойством без использования CB.
0
|
||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
||||||||||||||||
| 24.12.2019, 07:30 [ТС] | ||||||||||||||||
|
Доброе утро, Элд Хасп!
В КБ я обрабатываю событие:
0
|
||||||||||||||||
|
3 / 4 / 0
Регистрация: 19.09.2016
Сообщений: 91
|
|
| 24.12.2019, 07:43 [ТС] | |
|
Архив во вложении
0
|
|
|
Модератор
|
|
| 25.12.2019, 16:54 | |
Сообщение было отмечено Элд Хасп как решение
Решение
AII, там у вас большая каша.
Раскидал по нескольким проектам, чтобы вы дальше не создавали путаницу. Как с Базой работать - не разобрался. Поставил коллекции-заглушки чтобы возвращали корректные значения. TreeView - работает нормально. Товары выбранной категории отображаются правильно. По вопросу в этой теме - всё решено. Если делать целиком задачу, то там многое что ещё надо делать. И у проблем "ноги растут" из слоя Модель-База. Если продолжать дальше, то надо сначала отладить работу с Базой. И лучше не в этой теме. Создайте новую тему в которой для начала нужно будет создать полностью работающую Модель. Архив решения приложен. Посмотрите. С чем не сможете разобраться - пишите.
0
|
|
|
Модератор
|
||||||
| 26.12.2019, 01:31 | ||||||
|
AII, у вас неправильно инициализировалась База.
И по этим данным потом не могло построиться дерево категорий. Поменяйте инициализацию на такую
Добавлено через 1 минуту Да! Не забудьте после внесения изменений, перед запуском удалить созданную базу. Иначе она не будет по новой инициализирована. Добавлено через 8 минут Пытался довести до ума редактирование/добавление/удаление сущностей в Базе, но в такой структуре приложения очень трудно что-либо изменить. По сути если делать нормально, то надо пересоздать Модель. В ней толком не работают обе части: взаимодействие с Базой и с ViewModel. Работает только первичное чтение. Можно добавить изменение/удаление/добавление в Базу. Но отображаться в ViewModel эти изменения не будут. То есть первый шаг - как создавать и отображать дерево вы, наверное, уже поняли. А для нормальной связи с базой, нужно создавать другую структуру. Не статическую как сейчас, а динамическую - узлу создаются по мере их раскрытия. И выделенный узел поддерживается в актуальном состоянии. Тогда уже с базой сможет работать одновременно несколько пользователей и база может быть обширной с изображением, видео и т.п.
0
|
||||||
| 26.12.2019, 01:31 | |
|
Иерархическое меню и госы Иерархическое меню работающее вне ОС Как сделать иерархическое представление данных? Создать проект. Создать разделы меню. Вызвать форму из главного меню
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
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
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|