【问题标题】:Wpf binding error in datagrid still shows value数据网格中的 Wpf 绑定错误仍然显示值
【发布时间】:2013-09-04 15:47:49
【问题描述】:

我有一个带有数据网格的 wpf 应用程序(MVVM 样式)。我使用实体框架作为我的模型。在这个数据网格中,我有一列来自另一个表中的值。我使用导航属性来获取这个值。当数据网格加载有问题的列时显示正确的值,但在输出窗口中仍然生成绑定错误:

System.Windows.Data 错误:40:BindingExpression 路径错误: 在“对象”上找不到“产品类别”属性 ''tracking_stock_EA7F46EC8AD7F155921357AA6714C6C20BE807C4760A3B6DFC4FAC1954CA8119' (哈希码=49385318)'。空

datagrid 行绑定的对象称为 tracking_stock,其导航属性为 product,其本身的导航属性为 products_category 我用来获取 product_category.chrProdCtgry

这是一个概述 EF 设计的图像:

所以我的文本块在数据网格模板列中的绑定如下:

<DataGridTemplateColumn Header="CATEGORY" SortMemberPath="product.product_category.chrProdCtgry" ToolTipService.ToolTip="Category of the product" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding product.product_category.chrProdCtgry}" Style="{StaticResource FTC_DetailLabelSub}" Width="120" TextWrapping="NoWrap"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

现在,一切正常,列可以排序,文本块中的文本具有应有的值。

问题:

为什么在一切正常的情况下会抛出这个绑定错误?

编辑#1:

我试图删除排序声明:

SortMemberPath="product.product_category.chrProdCtgry"

绑定错误依旧存在

编辑#2:

所以我尝试将 IsAsync=True 添加到数据网格本身的文本块和集合绑定中。现在,在我对类别列进行排序之前,不会显示文本块值。此外,上面列出的绑定错误仍然存​​在,但现在生成了一个新错误:

System.Windows.Data 错误:17:无法获取“product_category”值 (类型“产品类别”)来自“产品”(类型 'product_83A5741ABC5EE6395B89B7B4B384137E8CF95991EF9918BD4525EF06B774469E')。 BindingExpression:路径=product.product_category.chrProdCtgry; DataItem='tracking_stock_EA7F46EC8AD7F155921357AA6714C6C20BE807C4760A3B6DFC4FAC1954CA8119' (哈希码=2011918);目标元素是'TextBlock'(名称='');目标 属性是“文本”(类型“字符串”) TargetInvocationException:'System.Reflection.TargetInvocationException: 调用的目标已引发异常。 ---> System.NullReferenceException:对象引用未设置为实例 一个对象。

编辑#3:

Sherridan 的帖子让我想到当从数据库上下文创建数据网格的集合时,数据不存在。于是我又回到实体框架的“GET”函数,通过以下三种方式强制包含导航属性,都没有摆脱绑定错误:

1

Dim trackingList = Await Context.tracking_stock.Include("product").ToListAsync
Return New ObservableCollection(Of tracking_stock)(trackingList)

2

Dim trackingList = Await Context.tracking_stock.Include("product.product_category").ToListAsync
Return New ObservableCollection(Of tracking_stock)(trackingList)

3

Dim trackingList = Await Context.tracking_stock.Include("product").Include("product.product_category").ToListAsync
Return New ObservableCollection(Of tracking_stock)(trackingList)

【问题讨论】:

  • +1 用于明确的问题更新描述。

标签: wpf entity-framework data-binding mvvm datagrid


【解决方案1】:

如果您使用异步数据访问操作,有时会发生这种情况......这可能是在数据到达之前数据到达并绑定数据之前发生的错误。我遇到了这个问题,我通过将IsAsync="True" 添加到我的Binding 来解决它。

更新>>>

根据对您问题的第一次编辑,如果您删除了排序声明并且错误仍然存​​在,那么这不是您的错误的原因。在整个解决方案中搜索product.product_category.chrProdCtgry...必须在某处的绑定中使用此文本的另一个实例。我正要回家,但如果有时间,我稍后会尝试再看一下。

【讨论】:

  • 感谢您的提示,但不幸的是它没有解决我的问题,请参阅我的第二次编辑
猜你喜欢
  • 1970-01-01
  • 2014-02-08
  • 2019-03-08
  • 2019-12-19
  • 1970-01-01
  • 2011-08-14
  • 2018-06-18
  • 2011-09-28
相关资源
最近更新 更多