【发布时间】:2013-02-18 22:28:30
【问题描述】:
我有一个带有四个枢轴的枢轴页面。在两个枢轴中,我有一个 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 的网格,文本绑定到一个 Interrupt-object 中的变量。
我通过对 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 会冻结,直到它被更新。
【问题讨论】:
-
你能发布你的代码吗?一般来说,情况不应该如此。
-
我认为这应该足以理解一切是如何运作的。
标签: silverlight windows-phone-7