将 GridViewColumn 绑定到 List<EntityFrameworkCore's Entity> 中的空属性

Posted

技术标签:

【中文标题】将 GridViewColumn 绑定到 List<EntityFrameworkCore\'s Entity> 中的空属性【英文标题】:Empty property in Binding the GridViewColumn to List<EntityFrameworkCore's Entity>将 GridViewColumn 绑定到 List<EntityFrameworkCore's Entity> 中的空属性 【发布时间】:2021-12-05 18:36:16 【问题描述】: 当我绑定另一个实体的名称时,我的 WPF (netcore3.1-windows) EFCore 5 应用程序中没有初始数据。 数据最初确实加载到同一个应用程序中,但使用页面加载的 WPF (net40) EFCore 6 应用程序:
    public partial class Entity
    
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
            
        public virtual AnotherEntity AnotherEntity  get; set; 
        ...
    
    ...
    WPFPage()
    
        _entities = DBContext.Entities.ToList();
    
<ListView ItemsSource="Binding _entities" ...> ...
    <GridView>                    
        <!--with FECore5 no data here. But in EF6 there is.-->
        <GridViewColumn DisplayMemberBinding="Binding Entity.AnotherEntityName" 
        Header="Entity"
        Width="100"></GridViewColumn>
    </GridView>
...

除非我从应用程序代码中的 AnotherEntities 属性访问和加载另一个数据库实体:

    public AnotherWPFPage()  _anotherEntities = DBContext.AnotherEntities.ToList(); 

或者如果我明确地将绑定设置为

    <GridViewColumn DisplayMemberBinding="Binding Entity.AnotherEntity.AnotherEntityName" 

这是由于 Fluent Api、xaml 绑定功能或 EntityFrameworkCore 的功能导致数据库的脚手架错误吗?

【问题讨论】:

@AndriyShevchenko,似乎我将不得不创建类似于局部变量“var list = DBContext.AnotherEntities.ToList();”的东西在 _entities = DBContext.Entities.ToList();之前,因为只在查询中包含 AnotherEntities 和 Entities 是行不通的。 【参考方案1】:

我无法访问您的完整代码库,但我认为这是由于 EF Core 延迟加载功能及其动态代理可能不适用于 WPF 绑定。 在你的代码中改变这个

_entities = DBContext.Entities.ToList();

到这里

_entities = DBContext.Entities
    .Include(x => x.AnotherEntity)
    .ToList();

【讨论】:

以上是关于将 GridViewColumn 绑定到 List<EntityFrameworkCore's Entity> 中的空属性的主要内容,如果未能解决你的问题,请参考以下文章

ListBoxItem 与 ListViewItem 的 GridViewColumn 绑定

WPF 在 GridViewColumn.CellTemplate 的 DataTemplate 中绑定 UserControl 属性

使用 DataTempülate 创建可编辑的 GridviewColumn

WPF:将Combobox添加到GridViewColumn标头中

XAML:相同的模板,不同的绑定

来自 ToolTip 或 ContextMenu 的 RelativeSource 绑定