带有嵌套对象的wpf datagrid数据绑定(如主细节)

带有嵌套对象的wpf datagrid数据绑定(如主细节),wpf,data-binding,datagrid,entity,master-detail,Wpf,Data Binding,Datagrid,Entity,Master Detail,我在wpf中将实体绑定到datagrid时遇到了一个简单的问题 我有一个名为“用户”的实体。。。。每个“用户”都有一个“工作组”。。两者之间的关系是一对一 现在在EF中,每个用户实体内部都有一个工作组实体 当我想将Users集合绑定到datagrid时,我不想说您必须将示例workgroup.Title放在datagrid列中 我试图以这种方式绑定: XAML: 此工作文件具有用户实体的直接属性,但它将工作组实体的类型放在datagrid列中,原因很明显。我想把工作组的名称放进去 我怎样才能

我在wpf中将实体绑定到datagrid时遇到了一个简单的问题

我有一个名为“用户”的实体。。。。每个“用户”都有一个“工作组”。。两者之间的关系是一对一

现在在EF中,每个用户实体内部都有一个工作组实体

当我想将Users集合绑定到datagrid时,我不想说您必须将示例workgroup.Title放在datagrid列中

我试图以这种方式绑定:

XAML:

此工作文件具有用户实体的直接属性,但它将工作组实体的类型放在datagrid列中,原因很明显。我想把工作组的名称放进去

我怎样才能做到这一点


任何帮助都将不胜感激

WPF绑定支持嵌套属性,因此要访问绑定对象属性上的任何子属性,只需使用普通的“.”语法:


您也不需要设置ItemsSource两次。如果将DataGrid的DataContext设置为窗口(或UserControl等),其背后的代码声明了Users属性,那么XAML中的ItemsSource绑定就足够了,您可以删除BindGrid方法。如果尚未设置DataContext,XAML ItemsSource绑定将不会执行任何操作(您可能会在调试输出中看到错误消息),因此您可以删除该错误消息,并让代码隐藏方法处理它

您还应该考虑在添加或移除项目时使用VelababelCelpEnter来获得自动通知和UI更新。由于您已经在使用EF,您也可以只使用EntityCollection for User,其中包括相同的自动INotifyCollectionChanged通知

<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Users}" HorizontalAlignment="Stretch" Margin="5" Name="dgUserList" VerticalAlignment="Stretch" SelectionChanged="dgUserList_SelectionChanged">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding FirstName}" Header="FirstName" />
                    <DataGridTextColumn Binding="{Binding LastName}" Header="LastName" />
                    <DataGridTextColumn Binding="{Binding Username}" Header="UserName" />
                    <DataGridTextColumn Binding="{Binding WorkGroup}" Header="Workgroup" />
                </DataGrid.Columns>
            </DataGrid>
public List<User> Users
    {
        get { return dal.GetUsers(); }
    }
private void BindGrid()
    {
        dgUserList.ItemsSource = Users;
    }
<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" />