【发布时间】:2011-06-11 21:17:41
【问题描述】:
我一直有一个 DataBinding 程序,我认为这是一个相当普遍的情况,但我似乎找不到任何有类似问题的人 - 这让我认为我错过了一些东西..
简而言之,在保存新的父实体后,父实体似乎无法在绑定操作期间引用 EntityRef 并引用相关实体上的属性……。细节来了……
我的层次结构如下所示:组织有一个或多个代表,其中每个代表都是一个人,每个人都有零个或多个电话号码。
所以组织->>代表->人员->>电话号码。
我使用列表框在左侧显示代表列表,右侧显示所选代表的详细信息。我使用 ListBox 中的选定项作为显示人员信息的网格的源。
我正在使用 WCF RIA 服务,因此我有一个名为 Organization 的 Entity 对象,其中包含代表的 EntitySet 集合,我将其用作绑定到列表框的 itemsource。
在每个代表中都有一个 Person 对象,它引导我到 Person First name 和 姓氏(在内部这是 EntityRef 发挥作用的地方)。
在代表框中,我想显示代表头衔,以及他们相关的名字和姓氏(位于相关实体 Person 上)。所以列表框会包含这样的内容:
职务 名 姓 区域经理比尔史密斯 区域经理 John Doe
XAML 如下所示:
<ListBox>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding ContactTitle}" Margin="5"/>
<TextBlock Grid.Column="1" Text="{Binding Path=Person.FirstName, Mode=OneWay, FallbackValue='New Representative'}" Margin="5"/>
<TextBlock Grid.Column="2" Text="{Binding Path=Person.LastName, Mode=OneWay, FallbackValue='New Representative'}" Margin="5"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
当我创建一个新的代表时,我还会创建一个新的人员记录,并立即将新人员与代表关联,并将代表与组织关联。
在我保存 DomainContext 之前,一切都很好。当我通过 RIA 服务提交更改时,我已经通过提交对其进行了跟踪,并且它更新了数据库,运行良好。提交操作完成后返回的提交结果看起来也不错。
我已确认 Org、Rep 和 Person 在客户端应用程序中都正确关联。
然而,当我返回列表框时,Person 的名字和姓氏都丢失了!我花了好几个小时(实际上是几天)试图确定原因,但似乎无法找到一种方法来追踪在提交回调和返回屏幕之间发生了什么。
在我的调试中,我添加了一个 SelectionChanged 事件处理程序,并添加了一个断点。当我单击新保存的行并查看 Person 时——它不为空,并且包含正确的数据——但列表框正在显示 FallBack 属性。
为什么在提交操作完成后数据绑定收到一个空值,但是当我在 selectionchanged 上命中断点时它就在那里。我确定这是一个时间问题——但肯定之前已经满足了这个要求!
【问题讨论】:
-
Rus - 不确定您要查找的 C# 代码 - 创建对象的所有内容都有效,包括保存。提交后,我可以看到提交结果中的记录,包括 Person 导航属性。当我让屏幕刷新时,Person 属性就消失了。
-
您在调试输出窗口中看到任何错误吗?所有数据绑定错误都写在那里。
标签: data-binding silverlight-4.0 wcf-ria-services