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 уведомление.