Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 17.10.2018
Сообщений: 29
WPF

WPF фильтрация элементов в ListBox в зависимости от выбранного элемента в TreeView

11.11.2019, 14:26. Показов 2074. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!
Имеется проект, на главном окне которого расположены TreeView и ListBox.
ListBox привязан к ObservableCollection во ViewModel. Эта коллекция элементов загружается из БД (EF, все дела).
TreeView привязан к другой коллекции, которая находится также во ViewModel. Данные в эту коллекцию загружаются из XML (серриализация).
Задача: Фильтровать элементы в ListBox, относительно выбранного элемента в TreeView с учетом родительских веток.
Например:
Элементы в ListBox содержат такие свойства, как Шкаф, Полка, Книга, Страница и т.д. (в моем случае 5 уровней).
И дерево в TreeView:
  • Шкаф 1
    • Полка 1
      • Книга 1
        • Страница 1
    • Полка 2
  • Шкаф 2

При выборе элемента "Шкаф 1" в ListBox остаются элементы со свойством "Шкаф 1", при выборе "Полка 1" - элементы первой полки первого шкафа и т.д.

В интернетах нашел примеры, но с TreeViewItem, а у меня коллекция из элементов другого класса. Как приводить типы, чтобы все работало, были видны родительские ветки и их имена, я не знаю
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2019, 14:26
Ответы с готовыми решениями:

Фильтрация элементов TreeView в зависимости от их BackColor
Здравствуйте! Есть элемент TreeView Отделы->Сотрудники, при формировании дерева меняю свойство BackColor у некоторых сотрудников....

Определение выбранного элемента в TreeView
Добрый день! Как определить выбранный элемент в TreeView в WPF. Обращение как Windows Form не работает :(: textBox.Text =...

Определение выбранного элемента в TreeView
Здравствуйте. Если вдруг не правильно выбрал раздел прошу простить меня. Итак, есть приложение Windows Forms на Visual C++. На форму...

5
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
11.11.2019, 14:45
ADSVS,

честно говоря не понял что и как там точно фильтруется, но вам нужно сделать в вашей vm свойство, которое будет отвечать за текущий выбор в treeview, это свойство биндите на SelectedItem вашего тривью. далее во vm при изменении этого свойства изменяете коллекцию, которая привязана к listbox. что-то вроде такого:

C#
1
2
3
4
5
6
7
8
9
10
11
12
public MyClass SelectedMyClass 
{
     get { return _selectedMyClass; }
     set { _selectedMyClass = value; OnPropertyChanged(); SetFilter();
}
 
public ObservableCollection<MyLBClass> MyLBCollection {...}
 
private void SetFilter
{
     MyLBCollection = (from st in DB.MyTable where st.MyProperty == SelectedMyClass.MyProperty).ToObservableCollection();
}
0
0 / 0 / 1
Регистрация: 17.10.2018
Сообщений: 29
11.11.2019, 15:00  [ТС]
hamin, "Свойство "SelectedItem" не имеет доступного метода задания" - пишет при попытке биндить к свойству

XML
1
2
3
4
5
6
7
8
9
10
<TreeView x:Name="t_TreeObjects" SelectedItem="{Binding SelectedTreeNode}" Grid.Row="1" Grid.ColumnSpan="6" ItemsSource="{Binding nodes}" KeyUp="t_TreeObjects_KeyUp" SelectedItemChanged="t_TreeObjects_SelectedItemChanged">
                                        <TreeView.ItemTemplate>
                                            <HierarchicalDataTemplate ItemsSource="{Binding Path=Nodes}">
                                                <TextBlock >
                                                    <Run Text="{Binding Name}"/>
                                                    <Run Text="{Binding Number}"/>
                                                </TextBlock>
                                            </HierarchicalDataTemplate>
                                        </TreeView.ItemTemplate>
                                    </TreeView>
0
WPF Разработчик
 Аватар для sttrox
463 / 167 / 42
Регистрация: 20.02.2018
Сообщений: 285
11.11.2019, 15:05
ADSVS, используйте SelectedValue
не столь давно здесь вели обсуждение
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
11.11.2019, 17:25
ADSVS, у TreeView свойство SelectedItem только для чтения.
Для привязки таких свойств используется Behavior.
Возьмите его реализацию из темы Behavior для привязки свойств только для чтения [WPF, Элд Хасп]
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
11.11.2019, 17:29
ADSVS, и второй вопрос самой фильтрации.
Если данные все считаны и находятся уже в VM, то для их фильтрации лучше воспользоваться CollectionViewSource.
В разделе есть несколько тем с примерами.

Добавлено через 1 минуту
ADSVS, посмотрите тему Динамическая фильтрация списка CollectionViewSource
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2019, 17:29
Помогаю со студенческими работами здесь

Возврат выбранного элемента TreeView MVVM
У меня есть TreeView. В &lt;HierarchicalDataTemplate/&gt; прописаны типы, которые есть в этом дереве. Я знаю, что у TreeView есть событие...

Возврат значения выбранного элемента TreeView по DblClick
Добрый день! Пол дня читал разные форумы, но так и не понял, как по двойному клику получить значение выбранного узла TreeView. При этом...

Сортировка в зависимости от выбранного элемента
Доброй ночи! Подскажите пожалуйста. У меня есть выпадающий список, при нажатии на элемент этого списка должны выводится записи, относящиеся...

Отображение выбранного в ListBox элемента
Как сделать так, чтобы нажимая по надписи в List Box(которая уже заранее указана), она появлялась в Edit Control?

Узнать значение выбранного элемента в listBox
У меня имеется ListBox,в котором находятся числа на промежутке: от 50 до 70. Например я выбрал элемент, индекс которого равен 4. Вопрос...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru