Проблемы с Xamarin Forms 4 (до 4) при использовании CollectionView в проекте UWP - PullRequest
0 голосов
/ 02 марта 2019

Здравствуйте, я сталкиваюсь с некоторыми хитрыми ошибками при попытке использовать новую функцию 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 исключение пропало

1 Ответ

0 голосов
/ 04 марта 2019

Я создал пример кода, который содержит CollectionView.Согласно документу, нам нужно вызвать SetFlag перед Xamarin.Forms.Forms.Init(e) в файле App.xaml.cs следующим образом.

........

Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
Xamarin.Forms.Forms.Init(e);

........

Реализация CollectionView

<CollectionView>
    <CollectionView.ItemsSource>
        <x:Array Type="{x:Type x:String}">
            <x:String>Baboon</x:String>
            <x:String>Capuchin Monkey</x:String>
            <x:String>Blue Monkey</x:String>
            <x:String>Squirrel Monkey</x:String>
            <x:String>Golden Lion Tamarin</x:String>
            <x:String>Howler Monkey</x:String>
            <x:String>Japanese Macaque</x:String>
        </x:Array>
    </CollectionView.ItemsSource>
</CollectionView>

И это хорошо работает. Для проблемы NullReferenceException необходимо проверить, есть ли в коде нулевой объект.Простая реализация CollectionView не вызывает такой ошибки.

Обновление

Пожалуйста, попробуйте обновить Xamarin Forms 4 до последней предварительной версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...