在一个按钮单击处理程序期间触发大量PropertyChangedEvents

本文关键字:PropertyChangedEvents 程序 处理 一个 单击 按钮 | 更新日期: 2023-09-27 17:51:18

我在一个uwp应用程序中有以下问题。

有一个listview被绑定到一个可观察对象集合。还有一个按钮可以更改集合中每个项目的一个属性,从而触发许多PropertyChanged事件。当集合中的项目不超过25个时,这种方法非常有效。如果有更多,我得到以下异常:

{"Layout cycle detected.  Layout could not complete."}

我认为这是因为有很多PropertyChanged事件导致许多UI更新在一个按钮点击。我试图在不触发PropertyChanged事件的情况下更新属性,但我无法让UI更新。

在一个按钮单击处理程序期间触发大量PropertyChangedEvents

谢谢你的建议。我现在能解决这个问题了。当我更改集合中的一个属性时,另一个列表视图变得可见,它也绑定到集合。所以我猜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在有时间的时候逐一更改每个元素的属性