使用列表将datagrid绑定到两个不同的类?

时间:2013-10-24 18:09:38

标签: c# wpf data-binding datagrid rowdetailstemplate

这是我在StackOverflow上的第一个问题所以我希望我没有做错任何事! 对不起,如果是这样的话!我需要一些帮助,因为我找不到问题的解决方案。当然我已经在网上搜索过但我找不到它(不能发布我正在使用的链接,因为我的声誉很低:()。而且,我是C#和WPF(以及自学)的新手。我以前在C ++ / Qt工作,所以我不知道WPF中的一切是如何工作的。对不起我的英语,我是法国人。

我的问题

我的基本课程是员工可以使用计算机。计算机的ID和使用日期存储在类Connection中。我想在DataGrid和RowDetailsTemplate中显示列表信息,如下所示:

enter image description here

因此它将绑定到Employee类,但也只绑定到Connection类,只包含属性的最后一个值(这里是列表“计算机ID”的最后一个值,最后一个是最后一台计算机上的“连接日期”列表的值)。所以它是不同列表中的循环。我该怎么办?

要做的太多了吗? :( 我成功获得了员工信息,但我不知道如何绑定计算机列表。当我尝试时,它会显示“(收藏)”,因此它不会进入列表:(

问题摘要

  1. 如何显示/绑定列表中的值和来自DataGrid中其他类的值?
  2. 如何将列表的所有值显示在RowDetailsTemplate
  3. 在Windows 7和Visual Studio 2010 Pro版本下。

2 个答案:

答案 0 :(得分:1)

我建议你熟悉MVVM模式,以防你还没有...这是非常基本的,所以你想修改/设计它以获得你想要的^ _ ^ ... < / p>

    <DataGrid ItemsSource="{Binding Employees}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}"/>
            <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}"/>
            <DataGridTextColumn Header="Gender" Binding="{Binding Gender}"/>
            <DataGridTextColumn Header="Last computer used" Binding="{Binding LastComputerUsed}"/>
            <DataGridTextColumn Header="Last connection date" Binding="{Binding LastConnectionDate}"/>
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <DataGrid ItemsSource="{Binding ComputerIDs}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Computer ID" Binding="{Binding ID}"/>
                        <DataGridTemplateColumn>
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <ListView ItemsSource="{Binding ConnectionDates}"/>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>

答案 1 :(得分:0)

让我们试试,

您可以创建一个名为EmployeeConnection的类,其中包含

公共员工员工{get;私人集; }  公共列表连接{get;私人集; }

因此,gridview中的每一行都有1个Employee和具有Connection的列。

您必须将EmployeeConnection作为gridview数据源。

可能是?