ListViewのアイテムの背景を動的に変更したいので、タイマーをイベントトリガーとして使用します。しかし、タイマーがトリガーされた後、ウィンドウのサイズを変更するまで、背景色は自動的に更新されません。これが私のコードスニペットです:
public MainWindow()
{
InitializeComponent();
ObservableCollection<Object> People = new ObservableCollection<Object>();
for (int i = 0; i < 10; i++)
People.Add(new Person());
listView.ItemsSource = People;
System.Timers.Timer _timer = new System.Timers.Timer(10);
_timer.Elapsed += new System.Timers.ElapsedEventHandler(theObjectDroped);
_timer.AutoReset = true;
_timer.Enabled = true;
}
public void theObjectDroped(object source, System.Timers.ElapsedEventArgs e)
{
for (int i = 0; i < listView.Items.Count; i++)
{
Dispatcher.Invoke(new Action<int, Brush>(ModifyListViewBackground), i, Brushes.Red);
}
}
private void ModifyListViewBackground(int i, Brush brush)
{
listView.ItemContainerGenerator.StatusChanged += (s, e) =>
{
ListViewItem row = listView.ItemContainerGenerator.ContainerFromIndex(i) as ListViewItem;
if (row != null && row.Background != brush)
{
row.Background = brush;
}
};
}