shuhelohelo’s blog

Xamarin.Forms多めです.

Xamarin.FormsのCollectionViewについてメモ

環境

  • Xamarin.Forms 4.4 preview2

遅延ローディングが簡単にできる! などなど。 こりゃすごい. https://devblogs.microsoft.com/xamarin/5-quick-tips-for-collectionview/

CollectionView, CarouselViewなどXamarin.FormsのUIコントロールの便利な機能を紹介している.

CollectionViewのItemの配置(レイアウト)はCollectionView.ItemLayoutで指定する.

レイアウトの種類は2つある.

  • GridItemsLayout グリッド状に配置する.複数列.
  • LinearItemsLayout 一列のみ.

それぞれ,項目間の隙間,スクロールさせたときに画面前端,中央,後端(または上端,中央,下端)にスナップ(吸い付くようにする)させるか,などを指定できる.

スナップの種類

SnapPointsType(スナップのタイプ)は以下の3つ

  • Mandatory 止まる直前にスナップさせる

  • MandatorySingle スナップさせるとともにスクロールは1アイテムずつだけ

  • None スナップさせずに自然に止まる

スナップさせる位置

スナップさせる位置は以下の3つ.

  • Start 一番上のアイテムが上端にスナップする

  • Center 中央のアイテムが中央にスナップする

  • End 一番下のアイテムが下端にスナップする

CollectionViewはListViewに比べて表現が豊富というか柔軟だと思う.

列数を簡単に変えられるし,スクロール時の挙動ももちろん変えられる.

遅延ローディングの機能もある.

アイテムの増分読み込み

遅延ローディング.

docs.microsoft.com

まだ表示されていないアイテムの数がRemainingItemsThresholdで指定した正の整数に達したらRemainingItemsThresholdReachedCommandに指定したCommandが実行される.もしくはRemainingItemsThresholdReachedイベントが用意されているので,そのイベントハンドラを用意する.

            <CollectionView ItemsSource="{Binding People}"
                            RemainingItemsThreshold="{Binding RemainItemsThreshold}"
                            RemainingItemsThresholdReachedCommand="{Binding RemainingItemsThresholdReachedCommand}"
                            HorizontalOptions="Center"
                            Margin="50"
                            SelectionMode="Single"
                            SelectionChanged="CollectionView_SelectionChanged" 
                            ItemSizingStrategy="MeasureFirstItem" >

RemainingItemsThreshold-1にするとこの機能を無効にできる.

RemainingItemsThresholdにデータバインドしたときにRemainingItemsThresholdReachedCommandが発火されない場合は最新のバージョンにアップデートするといい.

アイテムの選択を可能にする

SelectionModeで設定する.

  • Single
  • Multiple
  • None

SelectionChangedのsenderから,一つ前に選択していたアイテム,現在選択しているアイテムを取得できる.

取得できるのはバインディングされているオブジェクト.