从ListBox获取使用CollectionViewSource

时间:2018-05-02 08:34:55

标签: wpf xaml mvvm itemscontrol collectionviewsource

有没有办法让AlternationCount避免为每个新的CollectionViewSource重置?考虑到下面的代码,我试图在消息之间交替背景。消息被分组为天(今天,昨天,2天前等),这就是废弃AlternationCount的原因。假设我希望奇数索引具有白色背景,甚至索引具有灰色背景,这将针对每个新的一天/组重置。

<ItemsControl AlternationCount="2">
  <ItemsControl.Resources>
    <CollectionViewSource x:Key="MessagesStackPanel" Source="{Binding Messages}">
      <CollectionViewSource.GroupDescriptions>
        <PropertyGroupDescription PropertyName="MessageDate" />
      </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
  </ItemsControl.Resources>
</ItemsControl>

使用像这样的setter设置背景

<Grid.Style>
  <Style>
    <Style.Triggers>
      <Trigger Property="ItemsControl.AlternationIndex" Value="1">
        <Setter Property="Background" Value="LightGray"></Setter>
      </Trigger>
    </Style.Triggers>
  </Style>
</Grid.Style>

以下是一个例子,比如我今天收到3封邮件,昨天收到2封,两天前收到4封邮件 - 他们的背景是这样的:

Gray

Gray

Gray

Gray

这将使我在今天和昨天之间留下双白背景,这真的打破了设计。有没有办法让AlternationIndex 为每个新组重置?

2 个答案:

答案 0 :(得分:0)

你得到这个,因为每个组都是一组单独的项目 它计算组内的每个项目 我不知道保留分组的任何方法,但保持跨项目的交替计数。

您可以将自己的属性添加到代表每条消息的viewmodel中 您可以在读取数据时在代码中设置它。

答案 1 :(得分:0)

如果您想要控制索引(使用CollectionViewSource时),显然忘记ItemsControls是明智的。我的问题的答案最终可以在这个链接中找到:

Numbered listbox

我首先必须将我的ItemsControl更改为ListBox,然后我需要的是在我链接的帖子中 Wallstreet Programmer 的答案中解释的转换器。现在我可以完全控制索引,并可以相应地调整我的背景。对于我认为应该有更便宜和更简单的解决方案的东西,似乎有许多不必要的步骤,但至少它是有效的。

编辑:这不起作用。在我没有留下以下一组索引之后的早上离开它并在早上发送一些额外的消息之后:

1 2

1 2 3

2 3

示例中的转换器为索引加1,这就是为什么它是1 2而不是0 1.无论如何对我来说都无关紧要。在这个特定的例子中,它可以工作,但只是偶然。列表没有编号,我想要它的编号,但它在奇数和偶数之间交替。