Windows phone 7将项目异步添加到stackpanel

时间:2012-04-29 21:04:56

标签: c# windows-phone-7 asynchronous stackpanel

我想知道是否可以异步地将子项添加到stackpanel(或任何其他元素)。似乎所有项目都会立即呈现。

如果我使用后台工作人员或调度员,这并不重要。始终结果是相同的 - 当所有项目都已添加后,它们就会显示出来。

我想拥有的是这样的:

Deployment.Current.Dispatcher.BeginInvoke(() => {
    foreach (var item in items.Skip(x).Take(pageSize))
    {
        // when this row is executed new item should be visible
        ItemsList.Children.Add(new _ListItem(item));
    }
});

问候 最大

2 个答案:

答案 0 :(得分:4)

此片段每500毫秒将新的TextBlock添加到stackPanel,而不冻结UI。项目在添加后立即在UI中可见:

ThreadPool.QueueUserWorkItem(_ => {
                foreach (int item in Enumerable.Range(1,50)) {
                  Thread.Sleep(500);//simulate some calculations here
                  int item1 = item;
                  Deployment.Current.Dispatcher.BeginInvoke(() => {
                      stackPanel.Children.Add(new TextBlock(){Text = "Text "+item1});
                  });
                }
            });

答案 1 :(得分:1)

您应该使用ObservableCollection类来存储要显示的项目。该类实现了INotifyCollectionChanged接口,这将允许它在添加和删除项目时更新UI。

以下是有关binding to an ObservableCollectionupdating the UI as items are added的详细信息(请参阅此demo)。

此外,您可能需要使用Dispatcher添加/删除项目。