Задать вопрос
@Nidere

Как отобразить вложенный datagrid в rowdetails внешнего datagrid?

Я пытаюсь вывести в один датагрид большое число объектов с разными полями.
Я решил, что во внешнем датагриде будут столбцы с общими для всех объектов полями (ID, Entity ID, Тип), а по клику будет открываться датагрид, отображающий уже все остальные поля объекта, по которому я кликнул.

Вот, что есть:
<DataGrid x:Name="Components" 
                  AutoGenerateColumns="False"
            ItemsSource="{Binding world.components}">
            <DataGrid.Resources>
                <c:World x:Key="world"/>
            </DataGrid.Resources>
            <DataGrid.DataContext>
                <Binding Source="{StaticResource world}"/>
            </DataGrid.DataContext>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Component ID" Binding="{Binding cID}" Width="100"/>
                <DataGridTextColumn Header="Entity ID" Binding="{Binding eID}"  Width="100"/>
                <DataGridTextColumn Header="Component Type" Binding="{Binding compType.Name}" />
            </DataGrid.Columns>
            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <DataGrid
                        AutoGenerateColumns="True"
                        ItemsSource="{Binding ElementName=Components, Path=ItemsSource}">
                    </DataGrid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>


Вот, что получается:
5d63f6c17579d565889961.png

В rowdetails отображаются сразу все объекты из коллекции, а нужен только тот, что был выбран во внешнем датагриде
  • Вопрос задан
  • 526 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
cyber_roach
@cyber_roach
UX дизайнер INEDIapps
То что вы делаете - плохая практика, вы полностью убьете виртуализацию и это месиво из тяжелых контролов друг в друге будет тормозить, если данных много.
Простое правило - 2 датагрида на вьюху - предел.(в т.ч. и по юзабилити)
Все же RowDetails немного для другого предназначен, вывести какую-то строчку поясняющего текста, описание, статусы, не более.
Не совсем понятно что именно вы хотите, но вроде бы вот решение вашей задачи:
https://docs.microsoft.com/ru-ru/dotnet/framework/...

Если хотите коллекцию в коллекции и раскрывать по клику,
Возьмите какой-нибудь более продвинутрый грид с группировкой.
Или вот руководство как это сделать на стандартных элементах
https://docs.microsoft.com/ru-ru/dotnet/framework/...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BashkaMen
C# программист
Вы забиндили на ту же коллекцию, возможно стоит забиндить на SelectedItem?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы