【问题标题】:WPF binding to entity framework not updatingWPF 绑定到实体框架未更新
【发布时间】:2011-06-17 05:19:14
【问题描述】:

我有一些绑定到实体框架定义的对象。我的一些绑定更新正常,而另一些则没有。最好的解释方法是通过一个例子,我有这样的:

<TextBlock Text="{Binding Path=FirstName}"/>
<TextBlock Text="{Binding Path=LastName}"/>
<TextBlock Text="{Binding Path=Role.Name}"/>

在这种情况下,只要对象的属性发生更改,前 2 个文本块中的文本就会立即更新。在最后一个的情况下,什么也没有发生。我明白为什么会这样。实体框架有一个正在更新的属性 RoleID,它正在为 RoleID 引发属性更改事件,但 afaik 它不会为角色引发这样的事件。所以绑定不知道有什么变化。我可以看到的可能解决方案是让实体框架在 RoleID 更改时引发 Role 的属性更改事件,或者让绑定在 RoleID 而不是 Role 中查找更改。我不知道该怎么做。

提前感谢您的任何回复, 迈克尔

【问题讨论】:

    标签: wpf entity-framework entity-framework-4 binding


    【解决方案1】:

    我找到了解决方案。正如 Jerry 所说,实体对象需要引发属性更改事件。问题是实体框架只为 RoleID 而不是 Role 引发事件。我试图通过调用 ReportPropertyChanged 来引发我自己的事件,但这给出了一个错误,指出该属性不存在。解决方案是调用 OnPropertyChanged("Role") 而不是 ReportPropertyChanged。这可以在部分方法中完成,以便在更改 RoleID 时也会为角色引发事件。像这样的

    partial void OnRoleIDChanged()
    {
        OnPropertyChanged("Role");
    }
    

    【讨论】:

      【解决方案2】:

      你应该知道的两件事:

      1. 如果您的类属性未实现 INotifyPropertyChanged,则对基础数据的更改将不会反映在 UI 中。

      2. 如果您不将 UpdateSourceTrigger=PropertyChanged 添加到您的绑定中,那么对 UI 的更改将不会反映在基础数据中(直到您离开该字段)。

      我希望这会有所帮助。

      【讨论】:

      • 谢谢 Jerry,我已经认识了两位。问题是实体框架实现了 INotifyPropertyChanged,但仅针对 RoleID 属性而不是 Role。因此我的绑定不知道要更新,因为它的绑定路径是 Role.Name。关于设置 UpdateSourceTrigger=PropertyChanged 这仅适用于更改文本框但我使用的是只读元素(文本块),因此这无济于事。当实体框架对象更新时,我需要触发对绑定的更新。
      • 也许您可以将此标记为答案(根据您下面的后续答案)?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      相关资源
      最近更新 更多