Pou*_*yan 6 data-binding wpf datagrid entity master-detail
我有一个简单的问题,将实体绑定到wpf中的datagrid.
我有一个名为"用户"的实体....每个"用户"都有一个"工作组"......两者之间的关系是一对一的.
现在在EF中,每个用户实体内部都有一个工作组实体.
当我想将Users Collection绑定到datagrid时,我不知道你必须在datagrid列中放置forexample workgroup.Title
我试图以这种方式绑定:
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>
Run Code Online (Sandbox Code Playgroud)
Code Behind:创建了这样的属性:
public List<User> Users
{
get { return dal.GetUsers(); }
}
Run Code Online (Sandbox Code Playgroud)
并做绑定:
private void BindGrid()
{
dgUserList.ItemsSource = Users;
}
Run Code Online (Sandbox Code Playgroud)
此工作文件具有User Entity的直接属性,但它将Workgroup实体的类型放在datagrid列中,原因很明显.我想把工作组的标题放在里面
我怎么能做到这一点?
任何帮助将不胜感激
WPF Bindings支持嵌套属性,因此只需使用普通的"."来获取绑定对象的属性上的任何子属性.句法:
<DataGridTextColumn Binding="{Binding WorkGroup.Title}" Header="Workgroup" />
Run Code Online (Sandbox Code Playgroud)
您也不需要设置ItemsSource两次.如果将DataGrid的DataContext设置为Window(或UserControl等),其代码隐藏声明了Users属性,那么XAML中的ItemsSource绑定就足够了,您可以删除BindGrid方法.如果你还没有设置DataContext,那么XAML ItemsSource Binding没有做任何事情(你可能会在Debug Output中看到一条错误消息),所以你可以删除它并让代码隐藏方法来处理它.
您还应该考虑使用ObservableCollection在添加或删除项目时获取自动通知和UI更新.由于您已经在使用EF,因此您也可以只使用EntityCollection for User,其中包含相同的自动INotifyCollectionChanged通知.
| 归档时间: |
|
| 查看次数: |
7714 次 |
| 最近记录: |