我正在处理一个. NET 7 MAUI项目,想从C#更改CollectionView上某个特定项的样式。目前它正在工作,但所有其他项也可以在CollectionView上选择。如何禁止用户选择项,同时仍然从代码隐藏中选择项?
这是选择一个项目的代码:
SelectedItem = Items.FirstOrDefault(x => x.IsSelectedNext);
<CollectionView
SelectionMode="Single"
ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}">
<CollectionView.ItemTemplate>
<DataTemplate>
<Grid
ColumnDefinitions="*, Auto">
<Label
VerticalOptions="EndAndExpand"
Text="{Binding FullName}" />
<HorizontalStackLayout Grid.Column="1">
<Label
Text="{Binding Time}"/>
<Label
Text="{Binding TimePostfix}"/>
</HorizontalStackLayout>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我尝试使用CollectionView. SelectionMode ="None",但这也隐藏了从c#中完成的选择。当我尝试使用CollectionView. SelectionMode ="Single"时,我可以看到它,但也可以选择CollectionView上的其他项目。
2条答案
按热度按时间y4ekin9u1#
你在android上测试过吗?似乎windows和ios上有一个关于CollectionView selection does not display selection when page appearing的bug。在我的项目中,SelectedItem不能在后面的代码中设置。
另外,我创建了一个示例,在android上得到了你想要的效果。你可以在CollectionView的SelectedItemChanged事件中添加一些逻辑代码,根据你的需要设置SelectedItem。例如:
你可以把下面的代码放在后面的代码中,如果你使用了视图模型,你可以使用EventToCommandBehavior把这个事件转换成视图模型中的一个命令。
另外,我试过Arvis提到的
InputTransparent="True"
属性,它会使集合视图不能滚动,看起来像被禁用了。gstyhher2#
1.由于您希望禁用用户与项目选择的交互,因此不再真实的使用SeletctedItem(您在代码中获得项目),您可以只自定义自己的DataTemplate样式,并基于某个项目属性(可能是IsSelectedNext)设置UI可视化,然后设置
SelectionMode="None"
。1.最快的变通方法(不建议用于大型集合)。将
InputTransparent="True"
属性设置为CollectionView
,并将集合放入ScrollView
。