所以我有一个类似电子邮件收件箱的应用程序,我正在尝试为每一天创建一个分隔符。消息已按日期排序(从最新到最旧),但我想创建一行按日期划分它们,并可能在行顶部添加日期。消息存储在ViewModel中,并显示DataTemplate。我想不出创建这个功能的好方法,仍然维护MVVM方面。
到目前为止,我的想法是以某种方式存储日期值,当此值与前一个值不同时,我会插入一个新的分隔符。然后继续浏览消息,直到找到具有不同日期的消息,然后添加新的分隔符等等。
<DataTemplate DataType="{x:Type MessageViewModel}">
<StackPanel>
<TextBlock HorizontalAlignment="Center" Text="{Binding Date}"/> <!-- Only show this when it's a new date -->
<Path Data="m 0 0 200 0"/> <!-- Only show this when it's a new date -->
<Grid>
<!-- Message name, sender and stuff goes here -->
</Grid>
</StackPanel>
</DataTemplate>
我是否必须创建某种新的ViewModel来存储这些DateValues并通过Converter或Triggers进行比较?
答案 0 :(得分:1)
您可以绑定到已分组的GroupStyle
并定义GroupStyle
,如下所述:http://www.wpf-tutorial.com/listview-control/listview-grouping/。
分隔符将成为ContainerStyle
的{{1}}的一部分。您还可以在PropertyGroupDescription("Date)
的{{1}}集合中添加新的GroupDescriptions
,其中“日期”是您的电子邮件模型的日期属性的名称。
您也可以选择在视图中创建一个CollectionView
并绑定到这个:
CollectionViewSource