【问题标题】:What defines the bindings update order in WPF?什么定义了 WPF 中的绑定更新顺序?
【发布时间】:2009-07-26 16:19:41
【问题描述】:

我有一段使用多个绑定的 WPF/C# 代码:

  1. 组合框用于选择帐户
  2. 第二个组合框的 itemssource 属性绑定到选定的帐户。第二个组合框用于选择联系人
  3. 网格的 itemssource 属性绑定到选定的帐户。此网格包含选定的帐户发票。
  4. Contacts 组合框父 DataContext 绑定到选定的 Invoice。
  5. Contacts 组合框的 SelectedItem 绑定到数据上下文中 Invoice 的 InvoiceContact 属性。

但是绑定没有按照我希望的顺序更新。当我选择另一个帐户时,Contact 组合框的 ItemsSource 属性首先更改,然后显然更改了 SelectedItem,这会更改 InvoiceContact,然后,选定的 Invoice 会更改...

不用说它弄乱了所选的发票。

如何控制用于更新绑定的顺序?

谢谢

亚历克斯

【问题讨论】:

  • GUI 元素是相互绑定还是全部绑定到数据源或视图模型?
  • 如果没有看到实际的 XAML,就很难猜到。也许你可以通过在绑定中使用模式属性(双向、单向、单向源)来让生活更轻松

标签: c# wpf binding datacontext


【解决方案1】:

你是否在你的类中实现了 INotifyPropertyChanged 接口?如果您正常实施 INotifyPropertyChanged,我认为顺序并不那么重要

【讨论】:

  • 所有业务对象都是实体并实现 INotifyPropertyChange。作为一种解决方法,我将关键绑定更新触发器设置为显式,但必须有更优雅的方式来执行此操作。
【解决方案2】:

当我正要写一个答案(PropertyChanged...)时,我意识到:
我不知道你在尝试什么。
所以我painted your description...
我真的不知道您在第 4 步和第 5 步中尝试了什么。也许您可以详细说明一下?

【讨论】:

  • 好画!联系人组合框位于包含给定发票的所有详细信息的网格中。因此,正常流程是:帐户 -> 发票 -> 联系人账单 但是“账单收件人”联系人是组合框中的一个项目,其中包含该帐户的所有联系人。因此,我需要在执行 Invoice -> Bill to contact bindint 之前加载联系人列表(此组合框的 itemssource)。是不是更清楚了?
猜你喜欢
  • 2010-11-11
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多