Получение индекса из ListBox, который использует CollectionViewSource - PullRequest
0 голосов
/ 02 мая 2018

Есть ли способ заставить 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>

Фоны устанавливаются с помощью такого сеттера

<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 голосов
/ 02 мая 2018

Очевидно, стоит забыть о ItemsControls, если вы хотите иметь контроль над вашими индексами (при использовании CollectionViewSource). Ответ на мою проблему в конце концов можно найти по этой ссылке:

Нумерованный список

Сначала я должен был изменить свой ItemsControl на ListBox, затем все, что мне было нужно, - это конвертер, объясненный в ответе Wallstreet Programmer в посте, на который я ссылался. Теперь я полностью контролирую свои индексы и могу соответствующим образом скорректировать свои фоны. Похоже на множество ненужных шагов для чего-то, что, я думаю, должно найти способ дешевле и проще, но, по крайней мере, оно работает.

РЕДАКТИРОВАТЬ: Это не работает. Оставив его на ночь и отправив себе несколько дополнительных сообщений на следующее утро после того, как меня не оставили со следующим набором индексов:

1 2


1 2 3


2 3

Преобразователь из примера как есть добавляет 1 к индексу, поэтому это 1 2, а не 0 1. В любом случае для меня не имеет значения чередование. В этом конкретном примере это будет работать, но просто случайно. Список не нумеруется так, как я хочу, но, тем не менее, он чередуется с нечетным и четным.

0 голосов
/ 02 мая 2018

Вы получаете это, потому что каждая группа представляет собой отдельный набор предметов.
Он считается за единицу в группе.
Я не знаю ни одного способа сохранить группировку, сохраняя при этом чередующийся счет по элементам.

Вместо этого вы можете добавить собственное свойство к модели представления, представляющей каждое сообщение.
Вы можете установить это в коде, когда читаете данные.

...