WPF:如何在不阻止动画的情况下更新UI

WPF:如何在不阻止动画的情况下更新UI,wpf,multithreading,animation,Wpf,Multithreading,Animation,在我的WPF应用程序中,我有一个列表视图,它是视图,有一个网格视图。ListView的ItemsSource绑定到ViewModel中的ItemsCollection 这个GridView有很多列,而ListView可以有很多项 当windows正在加载或用户更新此ListView时,我会在从服务器检索新数据并使用新数据更新ViewModel中的ItemsCollection时显示加载动画 数据的检索已经异步完成,因此加载动画一直在旋转。但是一旦检索到数据并且绑定要更新列表视图,加载动画就会冻结

在我的WPF应用程序中,我有一个
列表视图
,它是
视图
,有一个
网格视图
ListView
ItemsSource
绑定到ViewModel中的ItemsCollection

这个
GridView
有很多列,而
ListView
可以有很多项

当windows正在加载或用户更新此
ListView
时,我会在从服务器检索新数据并使用新数据更新ViewModel中的ItemsCollection时显示加载动画

数据的检索已经异步完成,因此加载动画一直在旋转。但是一旦检索到数据并且绑定要更新
列表视图
,加载动画就会冻结,直到UI的更新完成

如何使加载动画即使在绑定更新UI时仍保持旋转

谢谢您的帮助。

编辑:

嗯,绑定在主线程中运行,与动画运行的线程相同

显然,我以前的解决方案对你没有帮助。您必须找到一种方法来减少渲染视图所需的时间。分享一些工作代码,也许有人能帮你


另一种选择是停止动画并显示静态内容。这样你就隐藏了问题。这不是一个很好的解决方案,但如果您找不到其他解决方案,这可能是您唯一的解决方案。

我知道,我已经异步获取了数据。这是在获得阻止动画的数据后绑定的更新。请共享一些代码。当您说更新绑定时,是否更新ListView源的绑定属性?是的,我更新ViewModel中的ObservableCollection,即ListView的ItemsSource绑定到的那个。明天我只能在这里输入一些代码。您是否正在使用大量记录更新ObservableCollection?如果是这样,将为每个单独的记录添加触发CollectionChanged事件。每个事件都将触发UI更新。是的,我在ViewModel中更新了ObservableCollection,并且此UI更新也冻结了UI线程上发生的动画。我遇到了一个问题,需要向ObservableCollection添加~1k个条目,UI在几秒钟内没有响应。我通过创建一个从ObservaleCollection派生的类来解决这个问题,该类有一个BulkAdd()方法。它仅在添加所有条目后引发一个事件。性能大大提高。请尝试查看UI问题是否消失。但这无助于解决一般问题,即更新UI会冻结UI上的任何其他内容,包括向用户显示某些操作已完成的动画。