Как оформить фон группы в Windows/Phone 8.1 ListView?

У меня есть привязка ListView к сгруппированным данным. Я хотел бы иметь возможность привязать фон каждой группы на основе содержимого элемента. GroupStyle.ContainerStyle устарел в 8.1 без изменения ItemsPanel ListView. К сожалению, это связано с ударом по производительности.

Есть ли способ определить фон для всей группы без изменения ItemsPanel ListView?

К сожалению, я не могу изменить шаблон элементов и заголовка вместе (хотя я пытался), потому что некоторые элементы дублируются и не знают, в какой группе они находятся.


person Nate Diamond    schedule 09.08.2014    source источник
comment
Не могли бы вы использовать конвертер, чтобы определить, в какой группе находится конкретный элемент?   -  person Igor Ralic    schedule 10.08.2014
comment
К сожалению, я думаю, что это было бы довольно сложно или, по крайней мере, очень дорого. Мне пришлось бы поместить его в контейнер элементов, а затем заставить преобразователь анализировать визуальное дерево вверх, пока не найдет источник ItemsControl. Это нужно было бы сделать для каждого элемента, что (я полагаю) лишает преимущества использования нового ItemsPanel, так что я мог бы также использовать старый. Это идея, которую я рассматривал, хотя.   -  person Nate Diamond    schedule 10.08.2014
comment
Вы можете использовать GroupStyleSelector для удовлетворения ваших потребностей.   -  person Prakash Selvaraj    schedule 11.08.2014
comment
Но как это поможет? Кажется, что каждый GroupStyle может определять только шаблон заголовка.   -  person Nate Diamond    schedule 11.08.2014
comment
Я думаю, что наличие свойства BackgroundBrush (лучше, чем конвертер) в вашей сущности vm - единственный вариант здесь. Я сомневаюсь, что это будет дорого, поскольку ListView будет отображать только то, что находится в представлении.   -  person Justin XL    schedule 16.08.2014


Ответы (1)


Существует два различных подхода к решению этой проблемы:

  • добавьте ответственное свойство в свой ItemTemplate и подключите его к конвертеру, который преобразует его в нужный вам тип (в вашем случае BackgroundColor). Проблема в том, как уже было сказано, что это очень затратно и на мой взгляд конвертер не предназначен для такой огромной операции. Не забывайте, что в MVVM ViewModel должна предоставлять всю информацию, которая необходима тому, кто проектирует представление.
  • лучше добавить свойство, которое называется что-то вроде «ItemBackground» и которое вы привязываете к ItemTemplate. Я предпочитаю этот подход, потому что нет никакой логики, какой фон использовать в представлении.
person David Leitner    schedule 21.08.2014
comment
Но проблема заключается в отрисовке фона по всей группе. Я могу решить для получения управления необходимой информации. - person Nate Diamond; 22.08.2014