我有一个带有四个枢轴的枢轴页面。在两个枢轴中,我有一个 ListBox,我以网格的形式填充信息。我将 ListItems 绑定到一个 ObservableCollection,其中填充了从 WCF 异步获取的信息。
但是,当设置 DataContext 并且 UI 正在用数据填充 ListBox 时,UI 似乎冻结了。ListItems 越多,冻结的时间越长。
编辑:校准。我仍然可以向上/向下滚动页面,但我无法通过滑动导航到不同的枢轴。转换发生在 UI 解冻之后。
有没有办法在不冻结 UI 的情况下填充 ListBox?
编辑:一些示例代码松散地解释了会发生什么。
列表框
<ListBox Name="lbInterruptYesterday" ScrollViewer.VerticalScrollBarVisibility="Disabled"
ItemsSource="{Binding Interrupts}"
ItemTemplate="{StaticResource InterruptListItem}" Tap="Interrupt_OnTap">
</ListBox>
Interrupts 是一个包含 Interrupt 对象的 ObservableCollection。
InterruptListItem 包含一个带有 TextBlocks 的网格,文本绑定到中断对象中的变量。
我通过对 WCF 的异步调用来获取数据。完成后我会:
(sender, e) => Deployment.Current.Dispatcher.BeginInvoke(() =>
{
//Some code handling the result which I put in the ObservableCollection
Production.Interrupts.add(new Interrupt());
//Set the DataContext
DataContext = Production;
});
并且当设置 DataContext 时,UI 会冻结,直到它被更新。