如何将集合绑定到datagrid列

时间:2019-06-24 08:34:45

标签: wpf mvvm datagrid

我想将版本集合绑定到我的数据网格-

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 个答案:

答案 0 :(得分:3)

您应检查Datagrid控件的Grouping function

编辑:看到您的数据结构,您还可以创建一个DatagridTemplateColumn并添加一个列表框,该列表框的itemssource绑定到Revisions属性。

答案 1 :(得分:1)

您可以将DataGridTemplateColumnItemsControl一起使用:

<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包含三个属性。 versionNamerevNumberComment。然后,您将不得不转换数据:

var transformed = versions
    .SelectMany(x => x.Revisions.Select(y => new { x.versionName, y.revNumber, y.Comment }))
    .ToArray();