Здравствуйте, я сталкиваюсь с некоторыми хитрыми ошибками при попытке использовать новую функцию CollectionView, реализованную в Xamarin Forms 4. В проекте Android она работает очень хорошо после включения экспериментальных функций в MainActivity.cs с:
global::Xamarin.Forms.Forms.SetFlags(new[] { "CollectionView_Experimental", "Shell_Experimental" });
Но документация xamarin не предоставляет никакой информации о проекте UWP, поэтому сначала, когда я пытался скомпилировать проект UWP, он выдает мне это исключение, когда он пытается отобразить страницу, которая использует CollectionView
System.InvalidOperationException:
'The class, property, or method you are attempting to use ('VerifyCollectionViewFlagEnabled') is part of CollectionView;
to use it, you must opt-in by calling Forms.SetFlags("CollectionView_Experimental") before calling Forms.Init().'
Поэтому я попыталсявызвать SetFlags в App.xaml.cs в проекте UWP перед вызовом метода InitializeComponent ().Поэтому в этот раз он выдает мне это исключение, когда пытается загрузить страницу, содержащую CollectionView
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Так же, как в этом примере
await Navigation.PushAsync(new PageWithCollectionView());
Исключение выдается после успешного исключения конструктора PageWithCollectionView.
Может кто-нибудь помочь мне решить эту проблему?
ОБНОВЛЕНИЕ
Хорошо, так что добавление SetFlags в App.xaml.cs в проекте UWP фактически работает, и CollectionView корректно инициализируется.Но NRE все еще там (на Android CollectionView работает без проблем), пытаясь избавиться от этой проблемы, я заметил, что это вызвано, когда я пытаюсь вложить макет XAML следующим образом:
<CollectionView SelectionMode="Single">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Horizontal" Span="2"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<StackLayout Orientation="Vertical" Grid.Column="0" Grid.Row="0">
<Label Text="{Binding Title}"/>
</StackLayout>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
ЕслиЯ удаляю все DataTemplate из CollectionView.ItemTemplate, просто оставляя его пустым, как это
<CollectionView SelectionMode="Single">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Horizontal" Span="2"/>
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
, когда страница визуализируется, CollectionView показывает элементы ItemSource с беспорядочной разметкой (без полей и отступов) и вызывает метод элемента toString длявизуализируйте его внутри ячейки)
[ОБНОВЛЕНИЕ] После обновления до Xamarin Forms 4 pre 8 исключение пропало