我在我的应用程序中使用 EntityFramework、WPF 和 MVVM,并且在更新 EntityObjects 之间关系的数据绑定时遇到了一些问题。我能够将我的问题缩小到只有几行 XAML,我希望有人可以帮助我,因为我对 EF 和 MVVM 仍然不是很有信心。
无论如何,我们在这里使用简化的 XAML:
<DatePicker Grid.Row="2" Grid.Column="1"
SelectedDate="{Binding Path=File.SentDate,
StringFormat={}{0:dd/MM/yyyy}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" IsEnabled="{Binding Path=IsEnabled}"/>
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding Contacts}" DisplayMemberPath="Name"
SelectedItem="{Binding Path=File.Sender, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEditable="True"
VerticalAlignment="Center">
</ComboBox>
<Label Content="{Binding Path=File.SenderId}" Grid.Row="4"/>
<Label Content="{Binding Path=File.Sender.Name}" Grid.Row="5"/>
<Label Content="{Binding Path=File.SentDate}" Grid.Row="6"/>
我正在使用最后 3 个标签来测试我的数据绑定。使用 DatePicker 更改 File.SentDate 将数据绑定更新到最后一个 Label 没有问题。
现在 File 是 EntityObject 类型,并且具有 GUID 类型的 SenderId 属性。它还通过 Sender 属性与我的联系人有关系。显然,SenderId 是通过 Sender 关系与 File 相关的对应 Contact EntityObject 的 GUID。一个文件只能有 1 个联系人类型的发件人。
无论如何,发生的情况是,当我使用组合框选择另一个发件人时,显示 File.SenderId 属性的标签会正确更新。但是,具有 File.Sender.Name 属性的那个,即使用关系的那个没有得到更新。
所以我猜想在 EF 中更新关系的数据绑定有一些特别之处。
有人可以提出解决方案吗?