【发布时间】:2019-07-24 10:36:04
【问题描述】:
我在尝试使用新的 CollectionView 时遇到了一些棘手的错误
在 Xamarin Forms 4 中实现的功能。在 Android 项目中,它非常有效
在 MainActivity.cs 中启用实验性功能之后很好:
global::Xamarin.Forms.Forms.SetFlags(new[] { "CollectionView_Experimental", "Shell_Experimental" });
但xamarin 文档没有提供有关 UWP 项目的任何信息
所以首先当我尝试编译 UWP 项目时,它抛出了这个异常
当它试图渲染一个使用 CollectionView 的页面时
System.InvalidOperationException:
'您尝试使用的类、属性或方法('VerifyCollectionViewFlagEnabled') 是 CollectionView 的一部分;要使用它,您必须通过调用 Forms.SetFlags("CollectionView_Experimental") 选择加入 在调用 Forms.Init() 之前。'
所以我在调用之前尝试在 UWP 项目中调用 App.xaml.cs 中的 SetFlags
初始化组件()方法。所以这次它抛出了这个异常
它尝试加载包含CollectionView的页面:
System.NullReferenceException: '对象引用未设置为对象的实例。'
就像这个例子:
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 元素混乱
布局(无margin和padding,调用元素的ToString()方法
将其可视化在单元格内)。
[更新]
更新到Xamarin Forms4 pre 8后,异常消失了。
【问题讨论】:
-
我很困惑。我以为 UWP 不支持
CollectionView。 -
由于XF最新更新,UWP也支持CollectionView
标签: c# xamarin.forms uwp