Пустое свойство при привязке столбца GridViewColumn к списку

#c# #wpf #entity-framework #xaml #entity-framework-core

Вопрос:

  • В моем приложении 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?.

Комментарии:

1. @AndriyShevchenko, похоже, мне придется создать что-то вроде локальной переменной «var list = DbContext. Еще одна мелочь. ToList();» перед _entities = DbContext.Сущности. ToList(); раньше, потому что только включение других сущностей в запрос вместе с сущностями не работает.

Ответ №1:

У меня нет доступа к вашей полной базе кода, но я предполагаю, что это связано с функцией ленивой загрузки ядра EF, и ее динамические прокси могут не работать с привязкой WPF. В вашем коде измените это

 _entities = DBContext.Entities.ToList();
 

К этому

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