2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Xamarin.FormsのCollectionViewのバグ

Posted at

Xamarinのシェルテンプレートから開発を開始し、最初にあるListViewをCollectionViewに変えたら全くリストが表示されなくなった。

環境

  • Xamarin.Forms 4.1.0.581479

問題の事象

CollectionViewが表示されるべき場所に何も表示されず、コンソールに以下のようなエラーが出ている。

Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason: Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (1) must be equal to the number of items contained in that section before the update (1), plus or minus the number of items inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).
Native stack trace:
	0   CoreFoundation                      0x00000001155686fb __exceptionPreprocess + 331
	1   libobjc.A.dylib                     0x00000001160eaac5 objc_exception_throw + 48
	2   CoreFoundation                      0x0000000115568482 +[NSException raise:format:arguments:] + 98
・・・

問題が起きる実装

Viewはシェルテンプレートで作られるItemPage.xamlを改修
ListViewからCollectionViewへ

    <CollectionView 
        x:Name="ItemsListView" 
        ItemsSource="{Binding Items}"
        VerticalOptions="FillAndExpand"
        HorizontalOptions="FillAndExpand"
        >
        <CollectionView.ItemTemplate>
            <DataTemplate>
                <Grid Padding="10">
          ・・・

ViewModel側はシェルテンプレートで作られるItemsViewModelそのまま。
ItemSourceのデータは以下で作られている。

            Items.Clear();
            var items = await DataStore.GetItemsAsync(true);
            foreach (var item in items)
            {
                Items.Add(item);
            }
      ・・・

原因

CollectionView.ItemSourceにバインドされているコレクションがResetされた時の動きがバグってる。
(ObservableCollectionをClearした時の動きがバグってる。)

対応

とりあえずItems.Clear()をコメントアウトしたら回避はできる。
Clearできないけど・・・

IssueはCloseされてるのでそのうちリリースされるでしょう。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?