【问题标题】:Getting index from ListBox that uses CollectionViewSource从使用 CollectionViewSource 的 ListBox 获取索引
【发布时间】:2018-05-02 08:34:54
【问题描述】:

有没有办法让 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

【问题讨论】:

    标签: wpf xaml mvvm itemscontrol collectionviewsource


    【解决方案1】:

    您会得到这个,因为每个组都是一组单独的项目。
    它对组内的每个项目进行计数。
    我不知道有任何方法可以保留分组但在项目之间保持交替计数。

    您可以改为将自己的属性添加到表示每条消息的视图模型中。
    您可以在读取数据时在代码中设置它。

    【讨论】:

    • 我必须将它设置在 CollectionViewSource 的工作位置附近,因为这就是设置顺序的原因。我会研究一下这个想法。
    【解决方案2】:

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

    Numbered listbox

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

    编辑:这不起作用。在我没有留下以下一组索引后,一夜之间离开并在第二天早上给自己发送了一些额外的消息:

    1 2


    1 2 3


    2 3

    示例中的转换器按原样将 1 添加到索引中,这就是为什么它是 1 2,而不是 0 1。反正对我来说交替无关紧要。在这个特定的例子中,它会起作用,但只是偶然。该列表没有按我想要的方式编号,但它在奇数和偶数之间交替。

    【讨论】:

    • 有什么方法可以强制我的视图在每次注意到新消息时重新渲染所有项目?现在它使用正确的索引添加新消息,但它似乎只是将后面的内容保持原样,打破了整个逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2019-10-15
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多