【问题标题】:RowDetailsTemplate ItemSource Binded to an EF NavigationProperty绑定到 EF NavigationProperty 的 RowDetailsTemplate ItemSource
【发布时间】:2014-11-25 15:50:31
【问题描述】:

我有一个DataGridPerson 对象,另一个DataGrid 在它的RowDetailsTemplate 中包含所选人员的工作,我使用EntityFramework 生成DataContext,每个人至少有一个作业(因此 Person 包含指向另一个类型为 PersonWork 的对象的外键)。 为了使用selectedPerson's 作品填充RowDetails DataGrid,我将其(RowDetailsTemplate)itemSource 绑定到Person 类(由EF 生成)的导航属性,但@987654333 @网格总是空的! (当我使用包含记录的即时窗口检查 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 生成的 Class Person 看起来像这样:

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

【问题讨论】:

    标签: c# wpf entity-framework wpfdatagrid


    【解决方案1】:

    为了实现这一点,您还必须在内部 DataGrid 中指定 DataContext 或使用 ElementName 直接从 Main DataGrid 获取内部 DataGrid Navigation 属性集合,以下代码完美运行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 2013-03-23
      • 2012-11-25
      • 1970-01-01
      相关资源
      最近更新 更多