2012-04-29 7 views
1

子供をstackpanel(または他の要素)に非同期で追加することが可能かどうか疑問に思っています。すべてのアイテムが一度にレンダリングされたようです。Windows phone 7は、項目を非同期的に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)); 
    } 
}); 

よろしく 最大

答えて

4

このスニペットは、UIをフリーズすることなく、500ミリ秒ごとに新しいTextBlockをstackPanelに追加します。アイテムが追加された直後に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}); 
        }); 
       } 
      }); 
+0

ありがとうございます!これはまさに私が必要なものです – maxlego

1

あなたが表示したい項目を格納するためにObservableCollectionクラスを使用する必要があります。私が持っているしたいと思いますどのような

はこのようなものです。そのクラスはINotifyCollectionChangedインターフェイスを実装しています。これにより、項目が追加および削除されるときにUIを更新できます。

binding to an ObservableCollectionupdating the UI as items are addedについてもう少し詳しく説明します(demoを参照)。

Dispatcherを使用してアイテムを追加/削除する必要がある場合もあります。