在一个按钮单击处理程序期间触发大量PropertyChangedEvents
本文关键字:PropertyChangedEvents 程序 处理 一个 单击 按钮 | 更新日期: 2023-09-27 17:51:18
我在一个uwp应用程序中有以下问题。
有一个listview被绑定到一个可观察对象集合。还有一个按钮可以更改集合中每个项目的一个属性,从而触发许多PropertyChanged事件。当集合中的项目不超过25个时,这种方法非常有效。如果有更多,我得到以下异常:
{"Layout cycle detected. Layout could not complete."}
我认为这是因为有很多PropertyChanged事件导致许多UI更新在一个按钮点击。我试图在不触发PropertyChanged事件的情况下更新属性,但我无法让UI更新。
谢谢你的建议。我现在能解决这个问题了。当我更改集合中的一个属性时,另一个列表视图变得可见,它也绑定到集合。所以我猜ui只需要一些时间来显示内部列表视图并计算外部列表视图的新大小。以下是我所做的:
Timer collapseTimer;
internal void collapseAll()
{
collapseTimer = new Timer(collapseCallBack, null, 0, Timeout.Infinite);
}
private async void collapseCallBack(object state)
{
foreach (var item in views)
{
var asyncAction = CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
{
item.IsCollapsed = true;
});
await Task.Delay(10);
}
collapseTimer.Dispose();
}
当collapsAll()被调用时,会启动一个后台线程,让ui在有时间的时候逐一更改每个元素的属性