2009-12-16 41 views
4
设定结果的最大数量

我试图显示一组在ItemsControl使用DataTemplate数据的,与所述ItemsPanel组作为尺寸3的均匀格栅X 3. ItemsControlItemsSource是设置为绑定到基于搜索项过滤源集合的CollectionViewSource。这一切工作正常。WPF如何从CollectionViewSource

我绑定到列表是任意大小的,但我只想要显示9个结果,但我不能为我的生活工作如何可以:
一)限制CollectionViewSource到输出前9项
b)将UniformPanel限制为只有3 x 3,并且从不创建新行
c)将ItemsControl限制为仅允许一次创建9个数据模板。

我真的很挠我的脑袋,因为我确定这是一个常见的数据绑定场景,但我在网上找不到任何关于它的东西。

+0

根据cwap的回答,我已经完全取消了CollectionViewSource,并在视图模型中创建了主列表和过滤列表,后者在搜索项更改时进行更新。 使用转换器是一个好主意,并且可能比在虚拟机中包含最大输出数量(为什么我将它标记为答案)更“纯粹”的MVVM,但现在我很高兴在虚拟机中完成它。 欢呼声回复所有。 – Guy 2009-12-16 14:20:17

回答

4

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

如果您使用的视图模型,把逻辑在里面创建可绑定到永远只能有9种元素的属性。确保它的单位测试,以确保超过9个元素永远不会潜入集合。

另外,您可以结合项目源时,用一个converter的完整列表转换成第一9.

+0

值得指出的是,转换器方法可防止更改事件传播。如果您添加或从绑定的数据源中移除,它将不会被反映。 – 2014-05-13 20:45:32

2

这只是您在XAML中无法完成的其中一项功能。

您可以创建一个“CollectionViewSourceView”(:P),每当CollectionViewSource更新时它都会更新,只输出前9个项目。不过,这是进入代码隐藏(或更好,视图模型)。

1

我正要说相同的詹姆斯·海伊(使用转换器)降低的名单,但我还补充说,你可以在XAML中绑定一个ConverterParameter来动态地指定返回多少项。