WPF DataGrid databind с вложенными объектами (например, master detail)

у меня есть простая проблема привязки сущности к datagrid в wpf.

у меня есть сущность под названием "пользователь".... и у каждого " пользователя "есть одна" рабочая группа".. отношения между ними один к одному.

Теперь в EF каждый объект пользователя имеет один объект рабочей группы внутри.

когда я хочу привязать коллекцию пользователей к datagrid, я понятия не имею, что вы должны поставить forexample workgroup.Заголовок внутри столбца datagrid

Я пытаюсь связать в таким образом :

XAML:

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

этот рабочий файл с прямыми свойствами сущности пользователя, но он помещает тип сущности рабочей группы в столбец datagrid, и причина очевидна. Я хочу поместить название рабочей группы внутри

как я могу достичь этого ?

любая помощь будет высоко оценили

1 ответов


привязки WPF поддерживают вложенные свойства, поэтому для доступа к любому из вложенных свойств свойства связанного объекта просто используйте normal ". синтаксис:

<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" />

вам также не нужно устанавливать ItemsSource дважды. Если у вас есть DataContext DataGrid, настроенный как окно(или UserControl и т. д.) чей код позади объявил свойство Users, то ItemsSource привязки в XAML достаточно, и можно удалить метод BindGrid. Если вы не установили DataContext, XAML Привязка ItemsSource ничего не делает (вы, вероятно, видите сообщение об ошибке в выходных данных отладки), поэтому вы можете удалить это и просто позволить методу кода позаботиться об этом.

вы также должны рассмотреть возможность использования ObservableCollection для получения автоматического уведомления и обновления пользовательского интерфейса при добавлении или удалении элементов. Поскольку вы уже используете EF, вы также можете использовать EntityCollection для пользователя, который включает тот же автоматический INotifyCollectionChanged уведомление.