Как привязать коллекцию к столбцу таблицы данных - PullRequest
0 голосов
/ 24 июня 2019

Я хочу связать коллекцию версии с моей сеткой данных -

public ObservableCollection<Version> versions { get; set; }

public class Version
{
     public string versionName { get; set; }
     public ObservableCollection<Revision> Revisions { get; set; }
}

public class Revision
{
    public string revNumber{ get; set; }
    public string Comment { get; set; }
}

Таблица данных должна выглядеть следующим образом -

Version Datagrid

Я знаю, как связать простую коллекцию с сеткой данных. но мое требование - отображать несколько ревизий для одного versionName. Я не знаю, как это сделать.

ниже - мой код XAMl -

<DataGrid Grid.Column="1" Grid.Row="0" Name="DataGridVersion" RowHeaderWidth="0" CanUserAddRows="False" AutoGenerateColumns="False" ItemsSource="{Binding Path=versions}" CanUserDeleteRows="False" Margin="25.2,82,22,19" IsReadOnly="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header = "Version" Binding = "{Binding versionName }" Width="0.35*" IsReadOnly="True"/>
            <DataGridTextColumn Header = "Revision"  Binding = "{Binding Revisions }" Width=" 0.2*" IsReadOnly="True"/>
            <DataGridTextColumn Header = "Comment" Binding = "{Binding comment }" Width="0.6*" IsReadOnly="True"/>
    </DataGrid>

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 24 июня 2019

Вы должны проверить Функция группировки элемента управления Datagrid.

РЕДАКТИРОВАТЬ: видя вашу структуру данных, вы также можете создать DatagridTemplateColumn и добавить список со своим источником элементов, привязанным к свойству Revisions.

1 голос
/ 24 июня 2019

Вы можете использовать DataGridTemplateColumn с ItemsControl:

<DataGrid Grid.Column="1" Grid.Row="0" Name="DataGridVersion" RowHeaderWidth="0" 
          CanUserAddRows="False" AutoGenerateColumns="False" ItemsSource="{Binding Path=versions}" 
          CanUserDeleteRows="False" Margin="25.2,82,22,19" IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridTextColumn Header = "Version" Binding = "{Binding versionName }" Width="0.35*" IsReadOnly="True"/>
        <DataGridTemplateColumn Header="Revisions" Width=" 0.2*" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding Revisions}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding revNumber}" />
                                    <TextBlock Text="{Binding Comment}" />
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

Если вы хотите иметь реальную ревизию и столбец комментариев в вашем DataGrid, вам следует привязать к ObservableCollection<T>, гдетип T содержит три свойства;versionName, revNumber и Comment.Затем вам придется преобразовать ваши данные:

var transformed = versions
    .SelectMany(x => x.Revisions.Select(y => new { x.versionName, y.revNumber, y.Comment }))
    .ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...