Показывать подколлекцию как столбец во время связывания - PullRequest
0 голосов
/ 06 января 2012

У меня есть коллекция объектов (Entity), которая содержит вложенную коллекцию (Result is Double []).

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

Пример [РЕДАКТИРОВАТЬ]:

Entity name | Entity Value | Result1 | Result2 | ... | Result n
_______________________________________________________________
My Name     | MyValue      | 1       | 2       | ... | 3
My Name II  | other Value  | 10%     | 20%     | ... | 30%

Я на самом деле использую решение, основанное на ICustomTypeDescriptor и PropertyDescriptor, описанном в этом потоке , но оно не подходит, потому что мы хотим редактировать значения в DataGrid, и его очень сложно поддерживать и развивать тоже.

1 Ответ

1 голос
/ 06 января 2012

Если у вас есть статическое число Result элементов, вы можете отключить AutoGenerateColumns и определить свои собственные столбцы, которые привязываются к этим значениям

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" />
        <DataGridTextColumn Binding="{Binding Value}" />
        <DataGridTextColumn Binding="{Binding Results[1]}" />
        <DataGridTextColumn Binding="{Binding Results[2]}" />
        ....
    </DataGrid.Columns>
</DataGrid>

Если у вас есть динамическая сумма, вы можете использовать DataGridTemplateColumn и отобразить свою подколлекцию в виде ItemsControl

<DataGrid AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Name}" />
        <DataGridTextColumn Binding="{Binding Value}" />
        <DataGridTemplateColumn>
            <DataGridTemplateColumn.ItemTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding Results}">
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBox Width="50" Value="{Binding }" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </DataGridTemplateColumn.ItemTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...