【问题标题】:WPF Entity Framework binding to navigation property not updatingWPF 实体框架绑定到导航属性未更新
【发布时间】:2012-06-22 14:45:06
【问题描述】:

我有一个带有绑定到实体框架对象的客户属性的视图模型。客户对象具有到其他表的多个导航属性。如果其中一个依赖表中已经存在现有记录,我的视图会正确显示,并且我可以编辑和保存,但是当我尝试将新对象添加到 Customer 属性时,例如:

Customer.BillingDetail = new CustomerBillingDetail();

即使 viewmodel Customer 属性填充了空白对象,视图也不会绑定到新对象。所以当我去保存时,输入的值都没有保存到视图模型中,它仍然有空白对象。

那么,如何让视图和视图模型在向导航属性添加新对象时进行通信?

我在视图模型中是否缺少用于跟踪客户导航属性的属性更改的内容?

谢谢, -Sid。

【问题讨论】:

  • 您可能需要将其添加到上下文中。使用 context.CreateObject 创建 billingdetail。
  • 视图不知道新对象。绑定必须在我的视图模型和视图之间。那么如何更新我的视图模型上的 Customer 属性,如果记录已经存在则正确绑定,但是当我向导航属性添加空白时不会正确绑定?我确定它与属性更改事件有关,但是您如何使用导航属性来做到这一点?
  • 我相信您的问题是 BillingDetail 最初为 null 并破坏了绑定。谷歌“WPF 绑定到空值”以获得一些帮助。实现后备值或使用 TargetNullValue 可能是您需要的。

标签: c# wpf entity-framework-4


【解决方案1】:

我猜你的 EF 对象没有实现 INotifyChanged 并且不使用 ObservableCollections

【讨论】:

    【解决方案2】:

    当您将视图与客户对象中的值绑定并在任何绑定控件中进行一些更改时,请澄清一件事。该更改是否保留在数据库中。如果没有,那么您必须尝试使用​​ TwoWay 模式绑定属性。

    它有助于从绑定控件更新您的客户对象。

    【讨论】:

    • 是的,只要导航属性在数据库中已有要绑定的记录,更改就会持续存在。我在主客户记录中有一个“标志”字段,指示他们是否是计费客户等......因此,当用户选择复选框以指示他们是计费客户时,没有现有的计费详细信息记录。所以我在 viewmodel Customer.BillingDetail 属性上创建了一个新的 CustomerBillingDetail 对象。但是当我去保存 BillingDetail 属性仍然是空白时,它没有任何我在视图中键入的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多