使用列表将数据网格绑定到两个不同的类?

Posted

技术标签:

【中文标题】使用列表将数据网格绑定到两个不同的类?【英文标题】:Binding datagrid to two different classes with lists? 【发布时间】:2013-11-03 14:24:42 【问题描述】:

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

我的问题

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

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

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

问题摘要

    如何在DataGrid 中显示/绑定列表和不同类中的值? 如何将列表的所有值显示到RowDetailsTemplate 中?

在 Windows 7 和 Visual Studio 2010 Pro 版本下。

【问题讨论】:

在我的示例中,我的设计可能存在问题。事实上,这不是我使用的真实设计。这是一个假的例子,因为我正在从事一个机密项目。对于那个很抱歉。我应该多考虑一下:/ 随意编辑您的问题以使其更清晰(我会相应地编辑我的答案)。 @MyRestlessDream 没有理由在您的问题中包含解决方案,这就是您将答案标记为已接受的原因。 【参考方案1】:

如果您还没有熟悉 MVVM 模式,我建议您熟悉一下...这是非常基本的,因此您需要对其进行修改/样式化以获得您想要的 ^_^...

    <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>

【讨论】:

这假定Employee 有一个ComputerIDs 的列表,另一方面,如果Connections 是列表,那么每个Connection 将只有一个ComputerID,或者它看起来不像您发布的图像:P ...在这种情况下,绑定将是ItemsSource="Binding Path="Connection.ComputerID""。此外,这假设您使用 LastComputerUsedLastConnectionDate 的 getter 来获取适当的值。如果您有任何其他问题,请随时发表评论(毕竟它看起来并不像您的图像,尽管它可以^_^)... ItemsSource="Binding Path="Connections"", &lt;DataGridTextColumn Header="Computer ID" Binding="Binding ComputerID.ID"/&gt;, ` `,对不起... 非常感谢!我几乎成功地完成了我想做的事情:D 但我还有另一个问题。您知道是否可以添加 Grid/其他布局而不是新的 DataGrid ?我想根据需要组织数据。你觉得有可能吗? 你可以添加任何你喜欢的东西,只要它有ItemsSource(即一种绑定到一个集合并获得每个项目的表示的方法)——任何从ItemsControl派生的东西,并且支持自定义DataTemplate 用于第三个列表嵌套的列(例如GridViewColumn.CellTemplate 用于GridView/ListView),尽管我相信styling it(链接:P)适当地比控制本身的选择更重要。 Oki 非常感谢 Stefan!我非常感谢您的帮助/建议/链接。我会尝试更多的东西,我会告诉你:)【参考方案2】:

让我们试试,

您可以创建一个名为 EmployeeConnection 的类,该类将具有

公共雇员雇员得到;私人套装; 公共列表连接获取;私人套装;

因此,gridview 中的每一行都将有 1 名员工和具有连接的列。

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

可以吗?

【讨论】:

感谢您的回答。这不是我想做的,因为不为此添加新类会很棒:/

以上是关于使用列表将数据网格绑定到两个不同的类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C#中将列表与WPF数据网格绑定?

将列表的内容数据绑定到数据网格

如何将 Telerik 网格列绑定到作为列表的子数据对象?

将列表绑定到包含复选框列的数据网格视图

XAML 绑定到 CompositeCollection

将Combobox的SelectedPerson绑定到数据网格