Tengo una clase que rellena un ListView al pasar una lista de objetos. La clase usa la reflexión para ver las propiedades de cada objeto para generar el ListView. ¿Cómo podría cambiar el color de fondo de una fila en el ListView?Cambiar el color de fondo de la fila ListView mediante programación (wpf)
Esto page hace exactamente lo que estoy buscando. El único problema es que mi ListView está vinculado a la lista de objetos. En otras palabras, cada elemento de ListView es un objeto vinculado en lugar de un ListViewItem. Supongo que esa es la razón por la que no puedo convertir ningún elemento en el ListView en un ListViewItem. Por ejemplo cuando hago esto:
ListViewItem someItem = (ListViewItem)listView1.Items[0];
consigo un InvalidCastException porque si yo dónde agregar físicamente los objetos al ListView como:
listview.items.add (someObject) entonces esto va a funcionar, pero porque estoy vinculando la lista al ListView, esa línea no funciona. Creo que esa es la razón por la que no soy capaz de lanzar. La razón por la que deseo lanzarlo es porque ListViewItem tiene una propiedad de Fondo.
EDITAR
soy capaz de hacer eso con los primeros 12 objetos He probado el folowing:
for (int i = 0; i < listView1.Items.Count; i++)
{
var lvitem = listView1.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem;
lvitem.Foreground = Brushes.Green;
}
y me sale este error:
y yo también lo han intentado esto:
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;
}
}
y me sale el mismo error:
No entiendo por qué LVITEM es nulo después de la iteración 12?
Sólo funciona con los elementos que se están exhibiendo ....
Ahora puedo hacer más cosas gracias. Sin embargo, no puedo cambiar el color. Seguiré intentando. –
lvitem.Background = Brushes.AliceBlue; Necesitaba usar Bush en lugar de Colors –
Bueno, eso es algo de sentido común. –