【问题标题】:WPF How to set a maximum amount of results from CollectionViewSourceWPF 如何从 CollectionViewSource 设置最大数量的结果
【发布时间】:2011-09-07 01:26:49
【问题描述】:

我正在尝试在ItemsControl 中使用DataTemplate 显示一组数据,其中ItemsPanel 设置为大小为3 x 3 的统一网格。ItemsSourceItemsControl 已设置绑定到基于搜索词过滤源集合的CollectionViewSource。这一切都很好。

我要绑定的列表是任意大小的,但我只想显示 9 个结果,但我终其一生都无法弄清楚如何:
a) 限制 CollectionViewSource 输出前 9 项
b) 将 UniformPanel 限制为仅 3 x 3,并且永远不要创建新行
c) 将ItemsControl 限制为一次只允许创建 9 个数据模板。

我真的很摸不着头脑,因为我确信这是一种常见的数据绑定场景,但我在网上找不到任何关于它的信息。

【问题讨论】:

  • 基于 cwap 的回答,我已经完全废弃了 CollectionViewSource,只是在视图模型中创建了一个主列表和一个过滤列表,后者在搜索词更改时更新。使用转换器是一个好主意,并且可能比在 VM 中包含最大输出数量更“纯”MVVM(为什么我将其标记为答案),但现在我很高兴在 VM 中这样做。为大家的回复干杯。

标签: c# wpf data-binding itemscontrol collectionviewsource


【解决方案1】:

我能想到的两个解决方案:

如果您使用的是视图模型,请将逻辑放入其中以创建一个您可以绑定到的属性,该属性只有 9 个元素。确保它经过单元测试,以确保不会有超过 9 个元素潜入集合中。

或者,您可以在绑定项目源时使用 converter 将完整列表转换为前 9 个的简化列表。

【讨论】:

  • 值得指出的是,转换器方法可以防止更改事件传播。如果您在绑定的数据源中添加或删除,则不会反映。
【解决方案2】:

这只是您在 XAML 中无法做到的事情之一(目前)。

您可以创建一个“CollectionViewSourceView”(:P),它会在 CollectionViewSource 更新时更新,只输出前 9 个项目。尽管如此,这仍将进入代码隐藏(或者更好的是,视图模型)。

【讨论】:

    【解决方案3】:

    我正要和 James Hay 说同样的话(使用转换器),但我还要补充一点,您可以在 XAML 中对 ConverterParameter 进行数据绑定,以动态指定返回的项目数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      相关资源
      最近更新 更多