Alterar a cor de plano de fundo da linha ListView programaticamente (wpf)
Tenho uma classe que preenche um ListView passando uma lista de objetos. A classe usa reflexão para ver as propriedades de cada objeto para gerar o ListView. Como eu poderia alterar a cor de fundo de uma linha no ListView.
Estepágin faz exatamente o que estou procurando. O único problema é que meu ListView está vinculado à lista de objetos. Em outras palavras, cada item do ListView é um objeto vinculado em vez de um ListViewItem. Estou assumindo que é a razão pela qual não consigo converter algum item no ListView para um ListViewItem. Por exemplo, quando faço isso:
ListViewItem someItem = (ListViewItem)listView1.Items[0];
Eu recebo uma InvalidcastException porque se eu adicionar fisicamente os objetos ao ListView, como:
listview.items.add (someObject), isso funcionará, mas porque estou vinculando a lista ao ListView, essa linha não funciona. Eu acho que é a razão pela qual eu não sou capaz de lançar. A razão pela qual eu quero transmiti-lo é porque um ListViewItem possui uma propriedade Background.
EDITA
Consigo fazer isso com os 12 primeiros objetos que tentei a seguir:
for (int i = 0; i < listView1.Items.Count; i++)
{
var lvitem = listView1.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem;
lvitem.Foreground = Brushes.Green;
}
e recebo este erro:
e eu também tentei isso:
foreach (Tiro t in listView1.Items)
{
var lvitem = listView1.ItemContainerGenerator.ContainerFromItem(t) as ListViewItem;
if (t.numero == 0 || t.numero == 37)
{
//lvitem.Background = Brushes.Green;
lvitem.Foreground = Brushes.Green;
}
else if (t.numero % 2 == 0)
{
//lvitem.Background = Brushes.Red;
lvitem.Foreground = Brushes.Red;
}
else
{
//lvitem.Background = Brushes.Gray;
lvitem.Foreground = Brushes.Black;
}
}
e recebo o mesmo erro:
Não entendo por que o lvitem é nulo após a iteração 1
Funciona apenas com os itens que estão sendo exibidos ....