Идеи о том, как сделать разделитель даты (Сегодня / Завтра) для почтового ящика как приложение?

Итак, у меня есть приложение, похожее на почтовый ящик, и я пытаюсь создать разделитель для каждого дня. Сообщения уже отсортированы по дате (от самой новой к самой старой), но я хочу сделать строку, чтобы разделить их по датам и, возможно, добавить даты поверх строк. Сообщения хранятся в 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 ​​и сделать сравнение через конвертер или через триггеры?

1 ответ

Решение

Вы можете привязать к сгруппированной CollectionView и определить GroupStyle как объяснено здесь: http://www.wpf-tutorial.com/listview-control/listview-grouping/.

Разделитель будет частью GroupStyle"s ContainerStyle, Вы также добавили бы новый PropertyGroupDescription("Date) к GroupDescriptions коллекция CollectionViewгде "Дата" - это имя свойства даты вашей модели электронной почты.

Вы также можете выбрать создать CollectionViewSource в представлении и привязать к этому:

<Window.Resources>
    <CollectionViewSource x:Name="cvs" Source="{Binding ViewModelCollection}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Date" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</Window.Resources>

<ListView ItemsSource="{Binding Source={StaticResource cvs}}">
    ...
</ListView>
Другие вопросы по тегам