wpf - EF EntityObject 不更新关系的数据绑定(bind)

标签 wpf mvvm entity-framework-4 entityobject

我在我的应用程序中使用 EntityFramework、WPF 和 MVVM,并且在更新 EntityObjects 之间关系的数据绑定(bind)时遇到了一些问题。我能够将我的问题缩小到只有几行 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 个标签来测试我的数据绑定(bind)。使用 DatePicker 更改 File.SentDate 将数据绑定(bind)更新到最后一个 Label 没有问题。

现在 File 是 EntityObject 类型,并且具有 GUID 类型的 SenderId 属性。它还通过 Sender 属性与我的联系人有关系。显然,SenderId 是通过 Sender 关系与 File 相关的对应 Contact EntityObject 的 GUID。一个文件只能有 1 个联系人类型的发件人。

无论如何,发生的情况是,当我使用组合框选择另一个发件人时,显示 File.SenderId 属性的标签会正确更新。但是,具有 File.Sender.Name 属性的那个,即使用关系的那个不会得到更新。

所以我猜想在 EF 中更新关系的数据绑定(bind)有一些特别之处。

有人可以提出解决方案吗?

最佳答案

不幸的是, Entity Framework 不会通知关联属性何时发生变化。这就是您的绑定(bind)不起作用的原因。

该问题已报告给 Microsoft:http://connect.microsoft.com/VisualStudio/feedback/details/532257/entity-framework-navigation-properties-don-t-raise-the-propertychanged-event

显示了另一种解决方法。书库 的示例应用程序WPF Application Framework (WAF) . Book 类监听 AssociationChanged 事件并引发相应的 PropertyChanged 事件。

public Book()
{
    …
    LendToReference.AssociationChanged += LendToReferenceAssociationChanged;
}

private void LendToReferenceAssociationChanged(object sender, 
        CollectionChangeEventArgs e)
{
    // The navigation property LendTo doesn't support the PropertyChanged event. 
    // We have to raise it ourselves.
    OnPropertyChanged("LendTo");
}

关于wpf - EF EntityObject 不更新关系的数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707215/

相关文章:

c# - Entity Framework 4.0 和自引用表; .SaveChanges() 在 .AddObject() 上失败

wpf - 在WPF中的屏幕之间导航

c# - TreeViewItems 和键绑定(bind)

wpf - 不要在 wpf mvvm 中为 Combobox 设置 SelectedItem

asp.net - 处理 EF4 中模型的默认值

linq - Linq 的奇怪行为

c# - 如何确定 WPF 窗口是否打开?

c# - 使用 Rx 确定鼠标拖动结束的正确方法是什么?

mvvm - 为什么模型中有 ObservableCollection 和 INotifyPropertyChanged?

wpf - MVVM 和有状态命令 - 好主意还是坏主意?