【问题标题】:Item replacement in ObservableCollection doesn't update WPF ItemsControlObservableCollection 中的项目替换不会更新 WPF ItemsControl
【发布时间】:2011-02-13 16:36:16
【问题描述】:

我有(我认为)一个相当传统的 WPF 应用程序。

我已经

<ListBox ItemsSource="{Binding MyList}" ...

MyList 是一个

ObservableCollection<MyItem>

MyItem 没有实现INotifiyPropertyChanged

当我Add 项目到 OC 时,UI 更新没有问题。 当我替换项时,通过

MyList[index] = newItem;

用户界面只是偶尔更新。 有时在窗口上选择另一个控件会有所帮助,但通常不会。更新速度约为每秒 5 次。如果重要的话,这是 Win7 x64 机器上的 WPF 4。

【问题讨论】:

    标签: wpf binding observablecollection


    【解决方案1】:

    我猜你最好使用Remove()Insert(index, item) 而不是分配给索引项。删除和插入项目必须引发 CollectionChanged 委托。

    【讨论】:

    • 不,这应该没什么区别,CollectionChanged 也注意到替换。
    • 可能是这样,但我不会把它留在那里,如果你这样做,你可能会掩盖一个错误(当然,除非这实际上是 WPF 中的一个错误)
    • H.B - 好点。关于在哪里看的任何建议?我已经确认这不是线程问题,因为对集合的更新正在使用主 Dispatcher。
    【解决方案2】:

    这对我来说完全没有意义,替换是由 ObservableCollections 注册的,到目前为止我没有任何问题......

    我怀疑错误出在其他地方。

    例如不小心用自己替换了该项目,破坏了与数据的绑定,诸如此类...

    顺便说一句,如果您遇到 sometimes 发生的行为,则该错误很可能出现在您自己的代码逻辑中,因为 sometimes 指向您通常的不确定行为应该不会在任何像样的框架中遇到。

    【讨论】:

    • 我发现了问题,替换项目不同,但 GetHashCode() 相同
    • 哦,这是一件很不幸的事情,我想很难注意到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多