2017-08-25 131 views
0

我的ListViewGridView,因为它的ViewListViewItemsSource绑定到ViewModel中的ItemsCollection。WPF:如何在不阻止动画的情况下更新UI

GridView有很多列和ListView可以有很多项目。

当窗口正在加载或用户更新此ListView我显示加载动画,同时从服务器检索新数据和更新ViewModel中的ItemsCollection与新数据。

这种数据检索已经异步完成,所以加载动画不断旋转。但只要检索到数据并且绑定要更新ListView,加载动画就会冻结,直到完成UI的更新。

即使绑定更新UI,我如何才能让我的加载动画继续旋转?

谢谢你的帮助。

+0

您是否正在使用大量记录更新ObservableCollection?如果是这样,每个单独的记录添加都会触发一个CollectionChanged事件。每个事件都会触发UI更新。 –

+0

是的,我更新了ViewModel中的ObservableCollection,并且此UI更新冻结了UI线程上发生的动画。 – Nostromo

+0

我遇到了一个问题,我需要将约1k条目添加到ObservableCollection中,并且UI在数秒内变得无响应。我通过创建一个派生自具有BulkAdd()方法的ObservableCollection的类来解决此问题。它只在所有条目添加完毕后才引发单个事件。性能大大提高。 –

回答

-1

编辑:

嗯,这在主线程运行结合,同一个线程动画运行。

很明显,我以前的解决方案不会帮助你。你将不得不寻找一种方法来减少渲染视图所需的时间。分享一些工作代码,也许有人可以帮助你。

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

+0

我知道,我已经异步获取我的数据。这是在获取阻止动画的数据之后绑定的更新。 – Nostromo

+0

请分享一些代码。当你说更新绑定时,是否更新作为ListView源的绑定属性? –

+0

是的,我更新了我的ViewModel中的ObservableCollection,这是我的ListView绑定到的ItemsSource。我明天只能在这里写一些代码。 – Nostromo

相关问题