1

Windows Phone 7 アプリケーションの 1 つのパノラマ ページに遅延読み込みリスト ボックス (スワイプ時にコンテンツを読み込む) を追加したいと考えていました。ただし、ピボットページを使用してそれを行うことができました。このリンクを参考にしました

しかし、これはパノラマページでは機能しません。
誰でも私を助けてもらえますか?

4

2 に答える 2

1

BCL Async パッケージを使用する (基本的に非同期タスクなどを WP7 に追加する) か、バックグラウンド ワーカーを使用します。BCL Async パッケージを強くお勧めします。Nuget に簡単にアクセスできます。

ここで、ViewModel (MVVM を使用していますか?) で、それがバインドされているプロパティを呼び出して、必要なアイテム タイプの をItems返す必要があります。ObservableCollectionさて、ここで魔法が起こります。そのプロパティのGetter で、新しいコレクションを返し、タスクを使用してそれを埋めます。このようなもの:

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

ハッピーコーディング!

于 2013-05-09T22:45:18.437 に答える
1

Telerik Rad Controls はもうご覧になりましたか? それらには、すべてのタイプのプル ツー リフレッシュ コントロールがあります。最近リリースした「Rad Libs」というアプリでそれらを使用しました。コントロールはhttp://www.telerik.com/products/windows-phone.aspxで確認できます。すべてのコントロールのデモを行うアプリをダウンロードすることもできます。(免責事項: 私は Telerik とは何の関係もありません。ここでそれらを宣伝しても何も得られません)

于 2013-05-08T14:47:06.683 に答える