【问题标题】:UI not updating when BindingList<> changesBindingList<> 更改时 UI 不更新
【发布时间】:2014-03-04 17:14:27
【问题描述】:

我怀疑我是否会为此收到关于 SO 的回复,但我无计可施,所以希望如此。

我的表单上有一个BindingList&lt;myObj&gt; 和一个BindingSource,它的DataSource 设置为BindingList。然后我有一个 Resco Mobile Controls UIListView 显示这些数据。

在启动时它显示得很好,数据被正确绑定,但当我更新任何数据时,它永远不会显示在 UI 中。我在myObj 上实现了INotifyPropertyChanged,但不知道我还应该寻找什么......

这一切都在带有 .NET CF 3.5 的 Windows CE 6 上。任何想法都将不胜感激,因为我已经研究了一段时间了。

【问题讨论】:

  • 您是否偶然从 WPF 背景进入了 CF 上的 WinForms?
  • 是的,但我使用 Winforms 的数量相当可观,而不是 CF....

标签: c# .net compact-framework bindinglist


【解决方案1】:

我解决了从主线程修改集合的问题,如果我从辅助线程更改它,则网格中不会更新更改。 (甚至调用currencyManager Refresh 或DataGrid Refresh)

【讨论】:

    【解决方案2】:

    通常情况下,BindingList 实现只会通知​​添加和删除操作的更改,不会收到更新项目的通知。我应该推荐使用通知项目更改的 ObservableCollection。 一个类似的帖子在这里。 Binding List and UI controls, not updating on edit 问候,佩德罗·莫拉莱斯。

    【讨论】:

    • 谢谢,我可能错了,但我不认为ObservableCollection 是 .NET CF 中的一个选项....
    【解决方案3】:

    需要更新时调用:

    bindingList.ResetBindings();
    

    【讨论】:

    • 没有更新视图
    【解决方案4】:

    我将对此进行尝试,因为您可能不会获得大量流量。

    您是否尝试过获取 CurrencyManager 并调用其刷新方法?请参阅以下内容:

    CurrencyManager.Refresh()

    【讨论】:

      【解决方案5】:

      结合这里的一些答案让我找到了我的解决方案。如果您不在 UI 线程上,则需要使用 Invoke 在 UI 线程上调用刷新。

      Public Sub RefreshMyBoundList()
          If (Me.InvokeRequired) Then
              Me.Invoke(New Action(AddressOf RefreshMyBoundList))
              Return
          End If
          MyBoundList.ResetBindings()
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2013-06-10
        • 2011-03-21
        • 2020-02-11
        • 2017-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多