У меня была похожая проблема, когда у меня был GridControl (devexpress WPF), с которым мне нужно было выполнять действие, когда оно перерисовывалось.Проблема была в том, что мне нужно было выполнить действие ПОСЛЕ того, как оно закончит заполнять сетку и рисовать все элементы.
Это решение взломано, однако на практике оно работает 100% времени без явных недостатков.Он работает путем простого запуска таймера после изменения видимого состояния и последующего запуска события.
public ctor()
{
Grid.IsVisibleChanged += TableOnIsVisibleChanged;
}
const int _msItTakesToDrawGrid = 5;
private Timer _timer;
private void TableOnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue != true || (bool)e.OldValue != false || _timer != null)
return;
_timer = new Timer { Interval = _msItTakesToDrawGrid };
_timer.Elapsed += DoStuff;
_timer.AutoReset = false;
_timer.Start();
}
private void DoStuff(object sender, ElapsedEventArgs e)
{
_timer.Stop();
_timer= null;
Dispatcher?.Invoke(stuff that needs to be done on the UI thread...);
}