Xuni 製品ヘルプ
ロードオンデマンド

ロードオンデマンド (インクリメンタルロード、増分読み込み) はモバイルアプリをはじめ、どのようなアプリケーションでも役立つ強力な機能です。Xuni CollectionView は、FlexGrid や ListView などのデータバインドされたコントロールにロードオンデマンド機能を提供します。Xamarin.Forms アプリケーションで増分ロードを利用するには、まず CursorCollectionView クラスを継承した CollectionView のクラスを作成をし、GetPageAsync メソッドをオーバーライドします。このクラスに、ページまたはチャンク単位でデータをロードするロジックを追加します。また、一度にロードするページ数を設定することもできます。

次の図は、ロードオンデマンドを適用した ListBox を示します。

collectionview-on-demand-loading-listview

以下のコード例は、Xuni CollectionView を使用した単純な ListView コントロールに対してロードオンデマンド機能を実装する方法を示します。

  1. 新しい Foms XAML ページの IncrementalLoading.xaml をプロジェクトに追加します。
  2. ListBox コントロールを初期化してロードオンデマンドを可能にするため、<ContentPage></ContentPage> 間のマークアップを以下のように変更します。

    XAML のコード

    XAML
    コードのコピー
      <StackLayout>
        <ListView x:Name="list" VerticalOptions="FillAndExpand">
          <ListView.ItemTemplate>
            <DataTemplate>
              <TextCell Text="{Binding ItemName}" Detail="{Binding ItemDateTime, StringFormat='Created: {0}'}" />
            </DataTemplate>
          </ListView.ItemTemplate>
        </ListView>
      </StackLayout>
    

  3. ソリューションエクスプローラーIncrementalLoading.xaml ノードを展開し、IncrementalLoading.xaml.cs を開いて C# コードビハインドを表示します。
  4. 以下のコードを IncrementalLoading クラスコンストラクターに追加して、ListBox コントロールのオンデマンドロードを実装します。
    以下のように System.Collections.Generic、System.Threading.Tasks、ColletionView および Xamarin 参照を含めます。
    using System.Collections.Generic;
    using System.Threading.Tasks;
    using Xuni.CollectionView;
    using Xamarin.Forms;
    

    C# のコード

    C#
    コードのコピー
    public SimpleOnDemand()
            {
                InitializeComponent();
                // ロードオンデマンド用の CollectionView をインスタンス化します。
                SimpleOnDemandCollectionView myCollectionView = new SimpleOnDemandCollectionView();
                list.ItemsSource = myCollectionView;
    
                // オンデマンドロードを開始します。
                list.LoadItemsOnDemand(myCollectionView);           
            }
        }
        public class SimpleOnDemandCollectionView : XuniCursorCollectionView<MyDataItem>
        {
            public SimpleOnDemandCollectionView()
            {
                PageSize = 10;
            }
    
            public int PageSize { get; set; }
            protected override async Task<Tuple<string, IReadOnlyList<MyDataItem>>> GetPageAsync(string pageToken, int? count = null)
            {
                // 新しい項目ページを作成します。
                var newItems = new List<MyDataItem>();
                for (int i = 0; i < this.PageSize; i++)
                {
                    newItems.Add(new MyDataItem(this.Count + i));
                }
                return new Tuple<string, IReadOnlyList<MyDataItem>>("token not used", newItems);
            }
        }
        public class MyDataItem
        {
            public MyDataItem(int index)
            {
                this.ItemName = "My Data Item #" + index.ToString();
                this.ItemDateTime = DateTime.Now;
            }
            public string ItemName { get; set; }
            public DateTime ItemDateTime { get; set; }
    

 

 


Copyright © GrapeCity inc. All rights reserved.