выходной скриншот

я есть класс, который заполняет ListView, передавая список объектов. Класс использует отражение, чтобы увидеть свойства каждого объекта для генерации ListView. Как я могу изменить цвет фона строки в ListView.

Этотстраница делает именно то, что я ищу. Единственная проблема заключается в том, что мой ListView привязан к списку объектов. Другими словами, каждый элемент ListView является объектом, который привязан вместо ListViewItem. Я предполагаю, что это причина, почему я не могу привести какой-либо элемент в ListView к ListViewItem. Например, когда я делаю это:

ListViewItem someItem = (ListViewItem)listView1.Items[0];

Я получаю InvalidcastException, потому что если я где физически добавить объекты в ListView, как:

listview.items.add (someObject), тогда это будет работать, но, поскольку я привязываю список к ListView, эта строка не работает. Я думаю, что это причина, почему я не могу сыграть. Причина, по которой я хочу привести его, заключается в том, что ListViewItem имеет свойство Background.

РЕДАКТИРОВАТЬ

Я могу сделать это с помощью первых 12 объектов, которые я пробовал:

for (int i = 0; i < listView1.Items.Count; i++)
{
    var lvitem = listView1.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem;
    lvitem.Foreground = Brushes.Green;                
}

и я получаю эту ошибку:

и я тоже попробовал это:

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;
    }

}

и я получаю ту же ошибку:

Я не понимаю, почему lvitem имеет значение null после 12 итераций?

Он работает только с элементами, которые отображаются ....

Ответы на вопрос(1)

Решение Вопроса

При использованииItemContainerGenerator затем помните, что контейнеры генерируются асинхронно. Генератор предоставляет событие изменения статуса, которое вы можете прослушать:

listView.ItemContainerGenerator.StatusChanged += new EventHandler(ContainerStatusChanged);     

private void ContainerStatusChanged(object sender, EventArgs e)  
{  
    if (listView.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)  
    {  
        foreach (Tiro t in listView1.Items)
        {
            ...
        }
    }  
}

Не уверен, что это создаст какие-то странные эффекты рисования (мерцание) или нет.

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

Ваш ответ на вопрос