Windows Phone 7 アプリケーションの 1 つのパノラマ ページに遅延読み込みリスト ボックス (スワイプ時にコンテンツを読み込む) を追加したいと考えていました。ただし、ピボットページを使用してそれを行うことができました。このリンクを参考にしました
しかし、これはパノラマページでは機能しません。
誰でも私を助けてもらえますか?
Windows Phone 7 アプリケーションの 1 つのパノラマ ページに遅延読み込みリスト ボックス (スワイプ時にコンテンツを読み込む) を追加したいと考えていました。ただし、ピボットページを使用してそれを行うことができました。このリンクを参考にしました
しかし、これはパノラマページでは機能しません。
誰でも私を助けてもらえますか?
BCL Async パッケージを使用する (基本的に非同期タスクなどを WP7 に追加する) か、バックグラウンド ワーカーを使用します。BCL Async パッケージを強くお勧めします。Nuget に簡単にアクセスできます。
ここで、ViewModel (MVVM を使用していますか?) で、それがバインドされているプロパティを呼び出して、必要なアイテム タイプの をItems
返す必要があります。ObservableCollection
さて、ここで魔法が起こります。そのプロパティのGet
ter で、新しいコレクションを返し、タスクを使用してそれを埋めます。このようなもの:
public ObservableCollection<object> Items
{
get
{
ObservableCollection<object> retCollection = new ObservableCollection<object>();
FillCollection(retCollection);
return retCollection;
}
}
public async void FillCollection(ObservableCollection<object> collectionToFill)
{
Task.Factory.StartNew(() =>
{
foreach(object objectToAdd in collectionImGettingThisDataFrom)
{
// We do this using the Dispatcher to
// be sure to pop back into the UI thread.
Deployment.Current.Dispatcher.BeginInvoke(
() => collectionToFill.Add(objectToAdd));
}
}
}
FillCollection は非同期であるため、Get メソッドは続行され、現在のコレクションが返されます。別のスレッドでは、作成されたタスクが追加するデータを見つけ、それを UI スレッドにプッシュしてコレクションに追加します。このようにして、UI スレッドを完全にブロックすることなく、データを要求した場合にのみデータを遅延ロードすることができます。それでも UI が遅くなることが判明した場合は、次の行を追加できます。
await TaskEx.Delay(25); // Some time in milliseconds. Too much and it will
// take a long time to load the list,
// too little and it will still bog down your UI.
foreach
ブロックの最後にありますが、呼び出しの中ではありませんDispatcher
。
ハッピーコーディング!
Telerik Rad Controls はもうご覧になりましたか? それらには、すべてのタイプのプル ツー リフレッシュ コントロールがあります。最近リリースした「Rad Libs」というアプリでそれらを使用しました。コントロールはhttp://www.telerik.com/products/windows-phone.aspxで確認できます。すべてのコントロールのデモを行うアプリをダウンロードすることもできます。(免責事項: 私は Telerik とは何の関係もありません。ここでそれらを宣伝しても何も得られません)