Альтернативный цвет строки WP7

Я хочу иметь чередующиеся цвета фона списка в моем проекте MVVM Light WP7.

WP7 не поддерживает изменение цвета фона для фона элементов ListBox.

У меня есть список с источником элементов, установленным на CollectionViewSource. CollectionViewSource, в свою очередь, привязан к ObservableCollection в моей ViewModel. CollectionViewSource настроен для сортировки списка по свойству datetime в моем настраиваемом объекте.

Когда список прокручивается вниз, в модель просмотра отправляется команда для добавления дополнительных данных в мою коллекцию. Поскольку CollectionViewSource сортируется по дате и времени, элементы могут появляться в любом месте списка, а не только в конце.

Это делает такие подходы, как http://chillijam.co.uk/2012/01/11/alternating-listbox-item-background-colours-in-wp7/ и Как применить альтернативный стиль строки в списке в оконном телефоне 7 не работает. Поскольку они проверяют только ранее добавленный элемент.

Я также подписался на событие ListView UpdateLayout и просматриваю каждый элемент в ListBox и меняю фон, но это срабатывает много раз, и приложение действительно перестает отвечать.

Есть у кого-нибудь идеи?


person Mårten Palm    schedule 18.07.2012    source источник
comment
Решение есть на forum.silverlight.net/t/14345.aspx   -  person ChrisF    schedule 18.07.2012
comment
возможный дубликат дизайна Silverlight Listbox - изменение цвета фона альтернативной строки   -  person ChrisF    schedule 18.07.2012
comment
Это средство хорошо работает при первой загрузке данных. Но когда я добавляю элементы в список, список переупорядочивается, но чередующиеся цвета получаются неверными.   -  person Mårten Palm    schedule 18.07.2012
comment
Я видел заметку об этом, поэтому просто разместил ссылку в качестве комментария.   -  person ChrisF    schedule 18.07.2012
comment
Да, это решение было первым, что я попробовал. Но мой вопрос все еще без ответа. Посты, на которые ссылаются, в этом случае не работают.   -  person Mårten Palm    schedule 19.07.2012
comment
Это стоит пояснить в теле вопроса.   -  person ChrisF    schedule 19.07.2012


Ответы (1)


Вы можете попробовать получить доступ к строкам по их количеству и добавить к ним цвета вроде.

if( row.id % 2 ==0)
//first color
else 
//second color

РЕДАКТИРОВАТЬ: я использовал это, чтобы изменить фон строки списка, когда он выбран

     ListBoxItem lbiSelected = (ListBoxItem)(CalcultionList.ItemContainerGenerator.ContainerFromIndex(selectedItemIndex));
     //CalculationList is the name of my listbox
     lbiSelected.Background = new SolidColorBrush(Colors.Red);
person Anila    schedule 18.07.2012
comment
Я сделал это для события UpdateLayout, но, как я уже сказал, это было не очень хорошее решение, поскольку оно срабатывало каждый раз, когда я прокручиваю. На какое событие я должен подписаться, чтобы обновлять представление при добавлении нового элемента? - person Mårten Palm; 18.07.2012
comment
Или где я могу получить доступ к row.id? Насколько мне известно, я не могу получить к нему доступ в контексте DataTemplate. - person Mårten Palm; 19.07.2012
comment
вы можете добавить его при инициализации listBox и всякий раз, когда вы добавляете строку, проверьте ее идентификатор и установите цвет. - person Anila; 19.07.2012
comment
Я использую Mvvm light, как указано в исходном сообщении, я сам не добавляю элементы. Моя привязка данных делает это за меня. - person Mårten Palm; 25.07.2012