Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何显示";“更多项目”;在ItemsControl中,当元素数大于n时?_C#_Wpf_Itemscontrol - Fatal编程技术网

C# 如何显示";“更多项目”;在ItemsControl中,当元素数大于n时?

C# 如何显示";“更多项目”;在ItemsControl中,当元素数大于n时?,c#,wpf,itemscontrol,C#,Wpf,Itemscontrol,我有一个ItemsControl,它以Windows8的方式显示分幅,有2列4行。每个磁贴都可以单击并触发一个命令,该命令将在另一个视图中加载所选项目 我的问题从这里开始:我的绑定IList可以同时包含8个以上的元素,但必须显示不超过8个分幅 我试图实现的是创建一种不同类型的平铺(链接到另一个命令),仅当我的IList大于8时才会显示(例如:使用Converter)。请检查下面的图纸以了解我的目标 到目前为止,我可以将IList容器中检索到的元素数量限制为7,只要它大于8,但添加“特殊”的第8

我有一个
ItemsControl
,它以Windows8的方式显示分幅,有2列4行。每个磁贴都可以单击并触发一个命令,该命令将在另一个视图中加载所选项目

我的问题从这里开始:我的绑定
IList
可以同时包含8个以上的元素,但必须显示不超过8个分幅

我试图实现的是创建一种不同类型的平铺(链接到另一个命令),仅当我的
IList
大于8时才会显示(例如:使用
Converter
)。请检查下面的图纸以了解我的目标


到目前为止,我可以将
IList
容器中检索到的元素数量限制为7,只要它大于8,但添加“特殊”的第8个元素对我来说仍然是一个谜。

我使用
CompositeCollection
解决了这个问题,这使得多个集合和项目可以显示为单个列表。更多关于

这是一个样本

xaml


请注意,我已经为两种不同的类型定义了数据模板,即int和string,这将帮助我相应地呈现相同的数据模板

公共视图模型()
{
IEnumerable originalData=可枚举范围(1,12);
Items=新的CompositeCollection();
Add(newcollectioncontainer(){Collection=originalData.Take(originalData.Count()>8?7:8)});
if(originalData.Count()>8)
Items.Add(originalData.Count()-7+“更多”);
}
公共CompositeCollection项{get;set;}
整个想法是限制主集合中元素的数量,并向不同类型的集合添加一个额外的元素,例如原始列表是int,额外是字符串

因此项控件将呈现集合中的所有元素,我们可以根据数据类型控制外观

您还可以使用
附加属性
转换器
来简化此过程或执行更复杂的功能

结果


您可能需要在集合中实现一些逻辑,CompositeCollection是神秘元素所需的东西单击“12个以上”时会发生什么:控件是显示19个元素(=7+12),还是显示带有“5个以上”平铺的下7个元素,还是显示带有“6个以上”平铺的下6个元素平铺和“上一页”平铺?@fmunkert当显示12个以上时,元素总数为7(显示)+12(隐藏)。当我点击第12个平铺项目时,我会用一个命令处理该操作,并显示另一种类型的页面,该页面将显示DataGridViewIMO中的所有19个元素。最简单的方法是使用“IEnumerable”作为绑定属性类型,并在需要时生成特殊项目。实际上,实施此解决方案不需要
复合收集
;一个普通的
observateCollection
也可以工作。感谢您提供了这个完整的示例,我甚至不知道这样的集合可以用DataType属性进行排序。这节省了我很多时间和时间!太好了!我很高兴您喜欢它,您可以尝试并深入了解它的多功能性。此外,CompositeCollection也支持集合更改通知,就像ObservableCollection一样。祝你好运,快乐编码:)