关于如何为应用程序等邮件收件箱创建日期分隔符(今天/明天)的想法?

时间:2018-04-20 08:33:42

标签: wpf datetime mvvm binding

所以我有一个类似电子邮件收件箱的应用程序,我正在尝试为每一天创建一个分隔符。消息已按日期排序(从最新到最旧),但我想创建一行按日期划分它们,并可能在行顶部添加日期。消息存储在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进行比较?

1 个答案:

答案 0 :(得分:1)

您可以绑定到已分组的GroupStyle并定义GroupStyle,如下所述:http://www.wpf-tutorial.com/listview-control/listview-grouping/

分隔符将成为ContainerStyle的{​​{1}}的一部分。您还可以在PropertyGroupDescription("Date)的{​​{1}}集合中添加新的GroupDescriptions,其中“日期”是您的电子邮件模型的日期属性的名称。

您也可以选择在视图中创建一个CollectionView并绑定到这个:

CollectionViewSource