编程语言
首页 > 编程语言> > c#-在UWP项目中使用CollectionView的Xamarin Forms 4(pre 4)问题

c#-在UWP项目中使用CollectionView的Xamarin Forms 4(pre 4)问题

作者:互联网

您好,我在尝试使用Xamarin Forms 4中实现的新CollectionView功能时遇到了一些棘手的错误.
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().'

因此,我尝试在调用InitializeComponent()方法之前在UWP项目中的App.xaml.cs中调用SetFlags.因此,这一次在尝试加载包含CollectionView的页面时引发了此异常

System.NullReferenceException: 'Object reference not set to an instance of an object.'

所以像这个例子

await Navigation.PushAsync(new PageWithCollectionView());

成功执行PageWithCollectionView构造函数后,将引发异常.

有人可以帮我解决这个问题吗?

更新

好的,因此在UWP项目中的App.xaml.cs中添加SetFlags实际上可以正常工作,并且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>

如果我从CollectionView.ItemTemplate中删除所有DataTemplate,则将其保留为空白

<CollectionView SelectionMode="Single">
                <CollectionView.ItemsLayout>
                    <GridItemsLayout Orientation="Horizontal" Span="2"/>
                </CollectionView.ItemsLayout>
                <CollectionView.ItemTemplate>

                </CollectionView.ItemTemplate>
            </CollectionView>

页面呈现为CollectionView,显示布局混乱的ItemSource元素(不带边距和填充,并调用element的toString方法在单元格内将其可视化)

[更新]
更新到Xamarin Forms 4 pre 8之后,该异常消失了

解决方法:

我创建了一个包含CollectionView的代码示例.根据该文档,我们需要在App.xaml.cs文件中的Xamarin.Forms.Forms.Init(e)之前调用SetFlag,如下所示.

........

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问题,您需要检查后面的代码中是否存在null对象. CollectionView的简单实现不会导致此类错误.

更新资料

请尝试将Xamarin Forms 4更新到最新的预版本.

标签:uwp,xamarin-forms,c
来源: https://codeday.me/bug/20191211/2105967.html