c# - 版本 5 中的 Xamarin.Forms CollectionView 和 IsVisible 奇怪行为
问题描述
我注意到最新版本的 Xamarin.Forms (5.0.02244) 和为 iOS 15 构建的东西有些奇怪。以下内容不影响此应用程序的 Android 版本,使用针对 Android 的最新 XF 构建可以正常使用此代码。XF < v5 或 iOS 14 不存在此问题。
Xamarin.Forms v4.x 和 v5 之间的 IsVisible 逻辑是否发生了变化?同样,降级到 XF 4 时,同样的代码也能正常工作。但是对于最新的 XCode 版本和 iOS 15,我现在需要使用 XF v5。
还是我做错了,它恰好适用于 XF v4(并且仍然适用于带有 XF v5 的 Android)
最小的例子:
下面是搜索框和结果视图的 XAML。结果视图填充了包含在搜索框中键入的文本的项目 (ItemsList)。它的高度也由 searchZoneHeight 设置。这一切都适用于 Android 和 iOS XF < v5。
isSearchResultVisible
当用户点击一个项目时设置,点击该项目将搜索栏文本设置为该项目,然后隐藏搜索结果。我在带有 XF v5 的 iOS 中看到的是 CollectionView 仍然显示为一个白框。白框的大小是一个搜索结果的高度。因此,视图的高度设置正确,但请求 isSearchResultVisible = false;
没有得到尊重。控制台中没有错误输出。
如果我绑定请求以使某些东西在点击时对另一个 UI 组件不可见,它就可以工作。似乎只有 RefreshView/CollectionView 忽略它。
任何建议都非常感谢,谢谢,
XAML
<SearchBar Text="{Binding searchText}" Placeholder="Type to search" IsSpellCheckEnabled="False" />
<RefreshView x:DataType="local:ViewModel" IsVisible="{Binding isSearchResultVisible, Mode=TwoWay}" Command="{Binding searchItems}" >
<CollectionView HeightRequest="{Binding searchZoneHeight}" x:Name="ItemsList"
ItemsSource="{Binding searchResultItems}"
SelectionMode="None" >
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout Padding="10" x:DataType="model:Item" >
<Label Text="{Binding Text}"
Style="{DynamicResource ListItemTextStyle}"
FontSize="16" />
<StackLayout.GestureRecognizers>
<TapGestureRecognizer
NumberOfTapsRequired="1"
Command="{Binding Source={RelativeSource AncestorType={x:Type local:ViewModel}}, Path=ItemTapped}"
CommandParameter="{Binding .}">
</TapGestureRecognizer>
</StackLayout.GestureRecognizers>
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
</RefreshView>
查看模型
async void OnItemSelected(Item item)
{
// This fires so I know the tap event works
Debug.WriteLine("Search result was tapped " + item.Text);
// Below line does set the search text correctly (iOS and Android)
searchText = item.Text;
// Below doesn't work on iOS
isSearchResultVisible = false;
OnPropertyChanged(nameof(isSearchResultVisible));
// Below line also does not work on iOS
//OnPropertyChanged("isSearchResultVisible");
}
解决方案
推荐阅读
- django - 类型对象'ProductForm'没有属性'cleaned_data'django
- azure-sql-database - 如何在 Azure WebApp 应用程序中跟踪请求和异常
- google-cloud-platform - GCP - 边缘到边缘路由
- firebase - Firebase Cloud Firestore 读取很久以前从 Firebase 控制台中删除的数据
- reactjs - 为什么渲染成功运行后 react-native 视图不会更新?
- javascript - 淘汰赛:基于选择选项上对象列表属性的警报
- reactjs - 从前端最佳实践将图像上传到 S3
- cassandra - 由于大量本地传输请求,cassandra 节点无响应
- r - 标记具有多个条件的组中的行
- ruby-on-rails - 为什么在第一个场景黄瓜测试后没有记录?