【问题标题】:Custom Listbox: Limit Maximum Item Count自定义列表框:限制最大项目数
【发布时间】:2023-03-06 20:09:02
【问题描述】:

我有一个 silverlight 3.0 项目,它有一个列表框,该列表框数据绑定到项目列表。我想要做的是将列表框中显示的项目数限制为

.Take(10) 方法的问题是原始数据源可能会更改,并且由于 .Take() 返回原始数据的引用(或复制不确定)我有时看不到反映的数据的变化在我的用户界面中。

我试图找出一种更好的方法来处理这个问题,而不是 .Take() 方法。如果您有多个 UI 元素绑定到相同的数据,您似乎不应该使用 LINQ 函数“过滤”您的数据。对于如何更好地做到这一点,我唯一的想法是制作一个可以限制计数的自定义容器,但这似乎是制作自定义堆栈面板或等效项可能需要大量工作。

【问题讨论】:

    标签: silverlight-3.0 listbox


    【解决方案1】:

    Take(10) 不进行复制,它只是将另一个步骤附加到 LINQ 查询。但是所有的执行仍然推迟到有人拉出查询的项目。

    如果您是静态设置项目,则通过运行一次查询确实会创建一个副本。但是由于您将构造的查询设置为列表框的ItemsSource 属性,因此它可以随时运行和更新,因此是正确的方法。

    您有时看不到 UI 中反映的数据变化的真正原因是,列表框无法确定查询返回的数据发生变化的原因,它肯定不想不断尝试重新获取数据并可能更新自身。你需要让它知道。

    你怎么能让它知道? ItemsSource 的文档说“您应该将 ItemsSource 设置为实现 INotifyCollectionChanged 接口的对象,以便反映集合中的更改 (...)。”。显然,.Net 本身的默认处理方式不适用于您的情况。

    所以有一些示例如何自己实现,例如在this SO answer。如果即使是顶级源数据集合(您正在执行 LINQ 查询)也不支持这些通知(您只需转发),您可能需要从更改底层数据的其他代码手动更新列表框.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-20
      相关资源
      最近更新 更多