C# 在集合视图中分组和显示不同类型的项-Xamarin表单
我试图获得一个日志类型的gui,其中条目按日期排序。 我想从数据库中取出日记账条目,对当天添加的条目进行分组,并用标签将这些分组分开。 有点像facebook messenger聊天记录 这就是我所想的:C# 在集合视图中分组和显示不同类型的项-Xamarin表单,c#,xaml,xamarin.forms,C#,Xaml,Xamarin.forms,我试图获得一个日志类型的gui,其中条目按日期排序。 我想从数据库中取出日记账条目,对当天添加的条目进行分组,并用标签将这些分组分开。 有点像facebook messenger聊天记录 这就是我所想的: <ScrollView> <CollectionView ItemsSource="{Binding JournalEntries}" SelectionMode="None"> <CollectionView.It
<ScrollView>
<CollectionView ItemsSource="{Binding JournalEntries}" SelectionMode="None">
<CollectionView.ItemTemplate>
<DataTemplate>
<Label>Date</Label>
<CollectionView ItemsSource="{Binding}">
</CollectionView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</ScrollView>
日期
问题是“JournalEntry”对象可以有多种类型。
例如,“Photo”源自“JournalEntry”。因此,如果“JournalEntries”集合中有“Photo”对象,我希望显示图像,而不是“ToString()”文本
JournalEntries.GroupBy(x=>x.date).ToDictionary()
。为此,您必须使用System.Ling。这将返回一个字典,其键将是日期和值中列表形式的所有条目。这将更易于您使用让我知道进一步的疑问。我一定能帮你 经过一些研究和测试,我找到了适合我的解决方案。Nikhil的回答是正确的,但我要说是不完整的,特别是因为它涉及DataTemplateSelector部分 首先,我创建了一个名为
EntryGroup
的类,它源自List
。
在此之后,我在ViewModel中创建了一个名为Entries
的绑定属性,它是EntryGroup
类型的IEnumerable
。
概述了这一过程
我创建了一个GroupHeaderTemplate来显示日期
在我的ViewModel中,我从存储库中获取条目,并使用.GroupBy(it=>it.Timestamp.Date)
Linq方法。这将返回一个i分组
。
因为它已经扩展了IEnumerable,所以完成了一半的工作。
我使用foreach循环将它们写入条目IEnumerable
然后,我创建了一个派生自
DataTemplateSelector
的类,并创建了一个ImageTemplate
和一个textmplate
,如下所述谢谢您的回答!关于第1点我仍然不确定如何确保每天只打印一次日期。对于您的解决方案,我仍然需要在另一个CollectionView中使用CollectionView,对吗?您可以在CollectionView中使用分组。嵌套的CollectionView不是一个好的做法。链接供您参考。这正是我要找的!非常感谢!