1

WinRT を使用しているときに GridView のインクリメンタル ロードを実装する方法に苦労しています。

ドキュメントでは、WinRT でインクリメンタル ロードを実行するためのメソッドを 1 つだけ指定しています。つまり、ISupportIncrementalLoading を実装するコレクションにバインドします。ただし、このインターフェイスはポータブル クラス ライブラリには存在しません。

ビューモデルをコア PCL に保持し、引き続きインクリメンタル ロードを実装できるかどうか疑問に思っています。

4

1 に答える 1

1

インターフェースが pcl プロファイルに存在しない場合、転送する 1 つの方法は、インターフェースを pcl にコピーし、ValueConverter を使用してインターフェースをラップし、ネイティブの同等のものに適合させることです。

これは、小さなインターフェイスでうまく機能します。これは、MvvmCross がIValueConverterそれ自体を移植可能なインターフェイスにする方法に似ています。

したがって、はい、ViewModel を PCL に実装し、ネイティブ UI がアダプタを介して移植性のないインターフェイスを使用することは可能です。

ただし、より大きなオブジェクトをマーシャリング/適応する必要がある場合、上記のプロセスは少し面倒になる可能性がありISupportIncrementalLoadingます。IEnumerableICollection

この場合、その「ViewModel」を非 PCL コードに移動する方が簡単な場合があります。

通常、コレクションを非 PCL コードに入れるだけでこれを行います。たとえば、次のようにします。

  1. ポータブルIMyIncrementalCollectionFactoryIMyIncrementalCollection<T>インターフェースを次のように宣言します。

    public interface IMyIncrementalCollectionFactory
    {
        IMyIncrementalCollection<T> Create();
    }
    
    public interface IMyIncrementalCollection<T>
    {
        event EventHandler<RequireMore<T>> OnRequireMore;
        void SetHasMore(bool value);
    }
    
  2. 呼び出しをイベントIMyIncrementalCollection<T>にマップするコレクション クラスを使用して WinRT に実装するLoadMoreItemsAsync<T>OnRequireMore

  3. IMyIncrementalCollectionFactory上記のコレクションのインスタンスを返すクラスを使用して WinRT に実装する

  4. IMyIncrementalCollectionFactoryコレクションの作成に使用するページ レベルの ViewModel を記述します。

これと同じプロセスで、「さらに読み込む」ロジック自体を共有コードに保持します。

于 2013-09-30T06:50:13.100 に答える