В моем приложении в стиле Metro для Windows 8 я привязываю Listview к ObservableCollection и хочу, чтобы цвет фона каждого ListViewItem чередовался (белый, серый, белый и т. д.)
В WPF это делается с помощью стиля с триггерами -, см. на этой странице .
Как это сделать в приложении Metro?
Обновление:
После того, как правильный ответ был дан ниже, я ушел и фактически закодировал его. Вот код для тех, кому он нужен:
Код класса преобразователя значений:
public class AltBackgroundConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (!(value is int)) return null;
int index = (int)value;
if (index % 2 == 0)
return Colors.White;
else
return Colors.LightGray;
}
// No need to implement converting back on a one-way binding
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Код для представления списка XAML:
... и при добавлении элементов в коллекцию или изменении коллекции не забудьте установить их индекс в коллекции:
myCollection.add(item);
item.IndexWithinParentCollection = myCollection.Count;
Конечно, если ваша коллекция часто меняется, этот подход будет дорогостоящим в обслуживании, так как вам придется -заново индексировать ваши элементы, поэтому мне было проще хранить ссылку на родительскую коллекцию в каждом элементе, а затем вычислять Индексируйте лету --с помощью.IndexOf (), чтобы избежать необходимости постоянно обновлять значения индекса при каждом изменении коллекции.