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

Разбор ListBox

27.09.2024, 19:37. Показов 730. Ответов 9

Студворк — интернет-сервис помощи студентам
Делаю экспорт в HTML . DataGrid разобрать элементарно
C#
1
2
3
4
5
6
7
            foreach (var item in list1.Columns)
            {
                DataGridTextColumn tk = (DataGridTextColumn)item;
                var gg = (Binding)tk.Binding;
                string sd = gg.Path;
               .........
             }
Как это сделать для ListBox ???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2024, 19:37
Ответы с готовыми решениями:

MVVM. Как прибиндить TextBox к вложенному ListBox в ListBoxItem основного ListBox
<UserControl x:Class="Wpf_CareerPattern.Views.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ...

Заполнение из SQLite элемента ListBox в зависимости от выбора в другом ListBox
Здравствуйте, подскажите пожалуйста как можно реализовать следующий функционал: Имеется listbox с названиями справочников, при выборе...

Сделать выборку в ListBox, в зависимости от выбора Item в другом ListBox'e?
Добрый всем день! Подскажите пожалуйста, как можно сделать выборку в listbox, в зависимости от выбора item в другом listboxe???? Сделал вот...

9
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,043
Записей в блоге: 2
28.09.2024, 00:59
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
DataGrid разобрать элементарно
Это "разбор" по колонкам. А в ListBox нет колонок.
Поэтому непонятно какой собственно вы ожидаете результат от листбокс.

Добавлено через 2 минуты
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
var gg = (Binding)tk.Binding;
Для ListBox это эквивалентно var gg = new Binding();
0
1 / 1 / 0
Регистрация: 01.09.2023
Сообщений: 26
29.09.2024, 10:17  [ТС]
Хорошо пусть нету , тогда как получить доступ к TextBlock и Label этой структуры ? этот же вопрос для TreeDataGrid .
Нужно практически все , Binding StringFormat Width.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid Margin="0 0">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="69"/>
                <ColumnDefinition Width="69"/>
                <ColumnDefinition Width="498"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBlock HorizontalAlignment="Right" Text="{Binding kod_rel,Mode=OneWay}" Grid.Column="0" />
            <Label Content="{Binding uet,Mode=OneWay,StringFormat='#,0.00;-#,0.00;#'}" Grid.Column="1" HorizontalContentAlignment="Right"/>
            <Label ToolTip.Placement="Left" ToolTip.Tip="{Binding name}" Content="{Binding name,Mode=OneWay}" Grid.Column="2" HorizontalContentAlignment="Left"/>
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,043
Записей в блоге: 2
29.09.2024, 10:49
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
Хорошо пусть нету , тогда как получить доступ к TextBlock и Label этой структуры ?
А зачем?
В WPF для подобного экстрима нет нужды.

Вы используете некую коллекцию для источника ListBox.
У сущностей этой коллекции есть свойства kod_rel, uet, name и др.
Меняете свойства этих сущностей и UI элементы, представляющие сущность, получат эти значения по привязкам.

Цитата Сообщение от Bobsoft1 Посмотреть сообщение
<Label Content="{Binding uet,
P.S. В WPF для вывода простого текста используется TextBlock.
Label - это гораздо более сложный и "тяжёлый" control.
0
1 / 1 / 0
Регистрация: 01.09.2023
Сообщений: 26
29.09.2024, 12:13  [ТС]
Я в начале писал что нужен экспорт в html excel и word а значит нужно вытащить все о каждом столбике и в том числе текст заголовка .
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
29.09.2024, 14:48
Bobsoft1, Вы не поняли. У вас есть некая модель с данными, с ними вы можете делать всё что захотите.
У вас есть view model с нужными свойствами. Эта view model задается для текущего окна-страницы, и свои свойства этоф vm привязываете куда душе угодно.
Изучите этот пример https://metanit.com/sharp/wpf/22.5.php тут наглядно показано как работать с vm, привязками и контролами.
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
XML
1
2
3
<TextBlock HorizontalAlignment="Right" Text="{Binding kod_rel,Mode=OneWay}" Grid.Column="0" />
            <Label Content="{Binding uet,Mode=OneWay,StringFormat='#,0.00;-#,0.00;#'}" Grid.Column="1" HorizontalContentAlignment="Right"/>
            <Label ToolTip.Placement="Left" ToolTip.Tip="{Binding name}" Content="{Binding name,Mode=OneWay}" Grid.Column="2" HorizontalContentAlignment="Left"/>
Элд Хасп, вам ранее написал что для доступа к Item строки, не нужно никакого экстрима.
В vm есть свойства у сущности коллекции kod_rel, uet, name и др. В них и хранится вся нужная информация, для импорта, экспорта, редактирования и т.п.
Доступ к самим контролам вам не нужен. Есть свойства, с ними и работайте.
1
1 / 1 / 0
Регистрация: 01.09.2023
Сообщений: 26
29.09.2024, 17:25  [ТС]
Нет там всей информации что нужно , например там нет Width , а заголовки у столбиков вообще сделаны в отдельном grid над ListBox.
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
29.09.2024, 17:34
Bobsoft1, вы уверены что нету или не правильно задаетесь вопросом?
Смотрите для Content="{Binding name,Mode=OneWay}" вы же можете привязать свойство? Да можете, отлично.
Тоже вы можете сделать и других свойств контрола, того же Width =>
XML
1
Width = "{Binding widthListbox}"
Вы можете в vm написать 10, 100, 1000 свойств и т.п. И для контекста окна-страницы вы можете делать привязку где захотите.
Для любых свойств, Content, Text, Width, Height, Background, Visiblity и т.п.

Добавлено через 3 минуты
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
а заголовки у столбиков вообще сделаны в отдельном grid над ListBox.
в примере что дал, для ListBox нет заголовков. Но не об этом речь.
Имея свойства в Vm для страницы-окна вы можете делать в любом месте привязке. Это же показано в примере по ссылке.
0
1 / 1 / 0
Регистрация: 01.09.2023
Сообщений: 26
29.09.2024, 18:39  [ТС]
Я не понимаю ответа . Мой вопрос был как мне добраться до TextBlock или Label в структуре
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="0 0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="69"/>
                            <ColumnDefinition Width="69"/>
                            <ColumnDefinition Width="498"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <TextBlock HorizontalAlignment="Right" Text="{Binding kod_rel,Mode=OneWay}" Grid.Column="0" />
                        <Label Content="{Binding uet,Mode=OneWay,StringFormat='#,0.00;-#,0.00;#'}" Grid.Column="1" HorizontalContentAlignment="Right"/>
                        <Label ToolTip.Placement="Left" ToolTip.Tip="{Binding name}" Content="{Binding name,Mode=OneWay}" Grid.Column="2" HorizontalContentAlignment="Left"/>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
только получив TextBlock или Label я смогу посмотреть его привязку , по моему так . Какой мне смысл рассуждать что я могу привязать Width если я не знаю как это потом получить . Кстати я посмотрел на TreeDataGrid там похоже все можно получить через FlatTreeDataGridSource , а вот как получить столбик на заголовок которого нажали мышкой для сортировки опять ковырять надо а уже как бы надоело .
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16118 / 11239 / 2887
Регистрация: 21.04.2018
Сообщений: 33,043
Записей в блоге: 2
29.09.2024, 18:56
Цитата Сообщение от Bobsoft1 Посмотреть сообщение
Нет там всей информации что нужно , например там нет Width
Если вам очень сильно нужно именно ВИЗУАЛЬНОЕ представление данных, а не только сами данные, то можно получить дочерние элементы из визуального дерева.

Для этого у меня создан такой метод расширения:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    public static partial class VisualTreeHelper
    {
        public static IEnumerable<DependencyObject> GetChildren(this DependencyObject parent)
        {
            ArgumentNullException.ThrowIfNull(parent);
            Queue<DependencyObject> queue = new Queue<DependencyObject>(16);
            queue.Enqueue(parent);
            while (queue.Count != 0)
            {
                DependencyObject current = queue.Dequeue();
                yield return current;
 
                int count = GetChildrenCount(current);
                for (int i = 0; i < count; i++)
                {
                    queue.Enqueue(GetChild(current, i));
                }
            }
        }
        public static IEnumerable<T> GetChildren<T>(this DependencyObject parent)
           where T : DependencyObject
            => parent.GetChildren().OfType<T>();
 
        public static T GetFirstChild<T>(this DependencyObject parent)
           where T : DependencyObject
            => (T)parent.GetChildren().FirstOrDefault(child => child is T);
 
    }
Применяете его к вашему ListBox
C#
1
2
3
4
5
6
7
8
9
foreach(ListBoxItem item = litBox.GetChildren<ListBoxItem>())
{
     Grid grid = item.GetFirstChild<Grid>();
     foreach(uiElement elm in grid.Children)
     {
         // Здесь уже все вложенные элементы вашего Grid
         Debug.WriteLine(elm.GetType());
     }
}
Добавлено через 16 минут
Но у такой работы напрямую с UI элементами могут быть побочные проблемы.
Например, для большого количества строк (вернее элементов коллекции), когда они не помещаются целиком в нужной области окна, будет включена виртуализация.
В этом случае, элементы которые находятся за границей области видимости могут быть не отрисованы. И, соответственно, их не будет в визуальном дереве и получить их не выйдет.

Возможно, более лучшим способом будет использование Генератора контейнеров:
C#
1
2
3
4
5
6
7
8
9
10
11
for(int i = ; i < litBox.Items.Count; i++)
{
     ListBoxItem item = (ListBoxItem) litBox.ItemContainerGenerator.ContainerFromIndex(i);
 
     Grid grid = item.GetFirstChild<Grid>();
     foreach(uiElement elm in grid.Children)
     {
         // Здесь уже все вложенные элементы вашего Grid
         Debug.WriteLine(elm.GetType());
     }
}
Но такой метод я очень редко использую и не могу точно сказать, как он будет вести себя в любых ситуациях.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.09.2024, 18:56
Помогаю со студенческими работами здесь

При выборе Item в одном ListBox'е, SelectedItem в другом ListBox, стал недоступен
А ещё скажите пожалуйста, как сделать, чтобы когда я выбирал Item в одном ListBox'е, Item в другом листбоксе, если до этого он был выбран,...

ListBox - как задать DisplayMemberPath для элементов входящих в ListBox, если они разные, а не одного класса?
ListBox - как задать DisplayMemberPath для каждого из типов элементов входящих в ListBox? Или хотя бы для одного из типов, например, для...

ListBox в Expander'e, в котором ещё один ListBox
Есть класс public class ItemMenu { public string Title { get; set; } public List&lt;string&gt; Orders { get;...

Добавить элемент в ListBox, который находится в ListBox
Привет, у меня есть горизонтальный ListBox ListBox'ов. Но как добавить туда элемент. ListBox ListBox'ов &lt;ListBox...

ListBox как сделать что бы элемент ListBox выполнял действия
на пример элемент ListBox очистил бы texbox


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru