Ale*_*lex 8 collectionview maui
我的 collectionView 中有这段代码:
<RefreshView>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CollectionView
ItemsSource="{Binding Comments}"
SelectionMode="Single">
<CollectionView.ItemsLayout>
<LinearItemsLayout Orientation="Vertical" ItemSpacing="5" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate x:DataType="model:Comment">
<Frame Style="{StaticResource CardView}" CornerRadius="10">
<Grid RowDefinitions="Auto, Auto, Auto, *" ColumnDefinitions="80, 250" ColumnSpacing="5">
...
</Grid>
</Frame>
</DataTemplate>
</CollectionView.ItemTemplate>
<CollectionView.EmptyView>
<ContentView>
<StackLayout>
<Label
Text="Some text here"
HorizontalOptions="Fill"
HorizontalTextAlignment="Center" />
</StackLayout>
</ContentView>
</CollectionView.EmptyView>
</CollectionView>
<Button
...
</Button>
<Button
...
</Button>
</Grid>
</RefreshView>
Run Code Online (Sandbox Code Playgroud)
奇怪的行为......当我用空集合启动程序时,当然,我看到......什么也没有。无标签。
运行时,我稍微更改文本,无论如何,我在末尾插入一个*,例如:Text =“Some text gone here *”,瞧,突然我的文本在中间正确显示我的屏幕 - 预期的行为!
我在模拟器和Android本地设备中都尝试过。同样的行为。
我还尝试在运行时设置该标签的标题 - 没有骰子。
我尝试过使用图像而不是标签。同样的事情也会发生。
一旦我对 EmptyView 的内容进行了更改,无论更改如何,EmptyView 都会在会话的剩余时间内显示其内容。如果我不这样做,它将永远保持空白。
有什么办法解决这个问题吗?
谢谢。亚历克斯.
这可能为时已晚,对您的情况没有帮助,但我也在努力让 EmptyView 开箱即用地正常工作。根据您的上一条评论,我能够通过在 OnNavigedTo 事件处理程序中调整 CollectionView 的高度和宽度来显示空内容。(当我单步执行代码时,我注意到两个属性都已初始化为 -1。)
不幸的是,此修复具有副作用,当我将项目添加到列表中时,我的 CollectionView 无法正确调整大小。
截至今天(23 年 3 月 24 日),仍有一个关于此问题的开放 Github 票证:
Android - CollectionView EmptyView 不可见 #10819
根据另一张票证,我找到了一种解决方法,通过将 CollectionView 包装在 RefreshView 中来解决 EmptyView 问题。我实际上并不想要刷新功能,所以我像这样禁用了它:
<RefreshView IsEnabled="False">
<CollectionView ItemsSource="{Binding FavoriteLocations}">
<CollectionView.EmptyView>
<ContentView>
. . .
</ContentView>
</CollectionView.EmptyView>
</CollectionView>
</RefreshView>
Run Code Online (Sandbox Code Playgroud)
值得庆幸的是,即使未启用 RefreshView,该技巧也能发挥作用。
编辑(5/2/23):自这篇文章以来我发现 RefreshView hack 在放置在另一个滚动条内部时不起作用。我在一个滚动条中显示了多个集合,这种模式完全破坏了我的 CollectionViews。
最终,我们废弃了所有 CollectionView 元素并采用以下模式:
<StackLayout BindableLayout.ItemsSource="{Binding MyList}">
<BindableLayout.EmptyView>
<Border BackgroundColor="White" Margin="0,5,0,0">
<Label Text="No items are available." />
</Border>
</BindableLayout.EmptyView>
<BindableLayout.ItemTemplate>
<DataTemplate>
<!--Display collection items as normal here-->
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
Run Code Online (Sandbox Code Playgroud)
EmptyView 开箱即用,没有任何不必要的解决方法。我建议使用 BindableLayouts,直到 MAUI 解决 CollectionViews 周围的所有错误。
| 归档时间: |
|
| 查看次数: |
1792 次 |
| 最近记录: |