我有一个DataGrid of Person对象,它的RowDetailsTemplate中有另一个DataGrid,它包含被选中的人的职务,我使用EntityFramework来生成DataContext,每个人至少有一个作业(因此person包含另一个PersonWork类型对象的外键)。为了用RowDetails DataGrid填充selectedPerson's works,我将其( RowDetailsTemplate) itemSource绑定到Person类的导航属性(由EF生成),但是RowDetails网格始终是空的!(当我使用即时窗口检查SelectedPerson.PersonWork时,它包含记录)
在这里我使用的Xaml代码:
<DataGrid Style="{StaticResource DataGridStyle}" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding ListPersons}" SelectedItem="{Binding SelectedPerson,Mode=TwoWay}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding PersonName}" Header="Name" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding PersonAge}" Header="Age" Width="SizeToHeader" MinWidth="100"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate >
<DataGrid Height="100" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Path=SelectedPerson.PersonWorks}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding WorkID}" Header="WorkID" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding WorkTitle}" Header="Title" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding WorkRecommandation}" Header="Recommandation" Width="SizeToHeader" MinWidth="300"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>EF生成的类人如下所示:
public partial class Person
{
public Person()
{
this.PersonWorks = new HashSet<PersonWorks>();
}
public long PersonId { get; set; }
public string PersonName { get; set; }
public long PersonAge { get; set; }
public virtual ICollection<PersonWork> PersonWorks { get; set; }
}Ps:我正在使用EF 6.1.1
更新 ListPersons是一个ObservableCollection,它被实例化如下:
var _dbContext=new DBEntities();
ListPersons= new ObservableCollection<Person>(_dbContext.Persons);发布于 2014-11-27 09:01:44
为了实现这一点,还必须在内部DataContext中指定内部DataGrid导航属性集合,或者使用ElementName直接从主DataGrid获取内部DataGrid导航属性集合,下面的代码工作得很好:
<DataGrid x:Name="DataGrid" Style="{StaticResource DataGridStyle}" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding ListPersons}" SelectedItem="{Binding SelectedPerson,Mode=TwoWay}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding PersonName}" Header="Name" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding PersonAge}" Header="Age" Width="SizeToHeader" MinWidth="100"/>
</DataGrid.Columns>
<DataGrid.RowDetailsTemplate>
<DataTemplate >
<DataGrid Height="100" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Path=SelectedItem.PersonWorks, ElementName=DataGrid}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding WorkID}" Header="WorkID" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding WorkTitle}" Header="Title" Width="SizeToHeader" MinWidth="100"/>
<DataGridTextColumn Binding="{Binding WorkRecommandation}" Header="Recommandation" Width="SizeToHeader" MinWidth="300"/>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>https://stackoverflow.com/questions/27131113
复制相似问题