【问题标题】:WPF data-binding manual updateWPF 数据绑定手动更新
【发布时间】:2009-04-23 15:40:01
【问题描述】:

我有一个来自非 WPF 程序集的 List,我正在尝试将其数据绑定到 WPF 。最初,列表项显示正确,但是当我向 List 添加新项时,列表框不会添加列表项。如何告诉列表框重新绑定/更新/刷新数据并显示新项目?

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

    虽然使用 ObservableCollection 是最好的方法,但要回答实际问题,手动更新的方法是调用 BindingExpression.UpdateTarget

    【讨论】:

    • 你在问题​​的场景中尝试过这个吗?我问的原因是我的印象是,如果集合是相同的引用,UpdateTarget 将不会更新列表(如果您创建一个新集合,那么这将强制重新绑定,或者如果您首先将源设置为 null)。
    【解决方案2】:

    您应该改用 ObservableCollection,然后您将自动获得更新。

    【讨论】:

    • 我可以在非 WPF 程序集中使用 ObservableCollection 吗?
    • 是的,如果包含 PresentationBase(我认为,该类在 System.Collections.ObjectModel 中,但 impl 在 PresetationBase 中);或者如果您想获得相同的功能,请通过实现 INotifyCollectionChanged 来制作您自己的 ObservableCollection。
    • 它在 WindowsBase 中,我同意。通常没有理由公开 ICollection 或 IList 以外的任何内容,因此您可以随时更换实现。
    【解决方案3】:

    感谢您发布此答案。即使您使用 ObservableCollection,您也可能需要使用 BindingExpression.UpdateTarget。如果集合不在 UI 线程中,则可能会出现这种情况。我一直在编写一些多线程 WPF 应用程序,当我将模型代码移动到另一个线程时,我发现自己不得不剥离数据绑定,因为我不能指望更新系统真正工作。虽然我发现数据绑定是一个很棒的概念,但我认为数据绑定系统的不透明性一直是我采用它的真正障碍。 (对不起,我的咆哮!)再次感谢亚当。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多