我有一些绑定到实体框架定义的对象。我的一些绑定更新正常,而其他绑定则没有。解释的最好方法是通过一个例子,我有这样的事情:
<TextBlock Text="{Binding Path=FirstName}"/>
<TextBlock Text="{Binding Path=LastName}"/>
<TextBlock Text="{Binding Path=Role.Name}"/>
在这种情况下,只要对象的属性发生更改,前两个文本块中的文本就会更新。在最后一个的情况下没有任何事情发生。我明白为什么会这样。实体框架有一个属性RoleID,它正在更新,它正在为RoleID提升属性更改事件,但是它不会为Role引发这样的事件。所以绑定并不知道有什么变化。我可以看到的可能解决方案是让实体框架在RoleID更改时为Role引发属性更改事件,或者让绑定在RoleID而不是Role中查找更改。我不确定如何做其中任何一个。
预先感谢任何回复, 迈克尔
答案 0 :(得分:3)
我找到了解决方案。正如Jerry所说,实体对象需要提出一个属性改变事件。问题是实体框架只为RoleID而不是Role提出事件。我试图通过调用ReportPropertyChanged来提升我自己的事件,但这是一个错误,说该属性不存在。解决方案是调用OnPropertyChanged(“Role”)而不是ReportPropertyChanged。这可以在部分方法中完成,以便在更改RoleID时,还会为角色引发事件。像这样的东西
partial void OnRoleIDChanged()
{
OnPropertyChanged("Role");
}
答案 1 :(得分:1)
你应该知道两件事:
如果您的类属性未实现INotifyPropertyChanged,则对基础数据的更改将不会反映在UI中。
如果您没有将UpdateSourceTrigger = PropertyChanged添加到绑定中,则对UI的更改将不会反映在基础数据中(直到您离开该字段)。
我希望这会有所帮助。