是否可以进行仅适用于第一个单元格并点击所有其他单元格的多选?
当然可以。如果你想要多选项目,我想接下来的步骤会做一些关于多选项目的任务。下面的图片可能看起来像你想要的。
您可以在分享链接中查看this chapter的内容,以及它提供的the sample code。
方案一:(一般可以接受)
如果项目不介意在外面加个控制按钮,那么这将是最快最简单的方法。也就是在NavigationPage中加一个ToolbarItems,用它来控制是否可以点击多选无需跳转到下一页。
添加ToolbarItems:
<ContentPage.ToolbarItems>
<ToolbarItem x:Name="ToolbarItemsButton" Text="MultipleSelect" Clicked="Edit_Clicked"/>
</ContentPage.ToolbarItems>
<sync:SfListView x:Name="listView"
SelectionGesture="Hold"
SelectionMode="Multiple"
ItemTapped="ListView_ItemTapped"
SelectionBackgroundColor="Transparent"
IsStickyHeader="True" ItemSize="70">
...
在ContentPage中,添加Flag判断SelectionMode的ListView。
int flag = 0;
private void Edit_Clicked(object sender, EventArgs e)
{
if(0 == flag)
{
listView.SelectionGesture = TouchGesture.Tap;
ToolbarItemsButton.Text = "Done";
flag = 1;
}
else
{
ToolbarItemsButton.Text = "MultipleSelect";
listView.SelectionGesture = TouchGesture.Hold;
flag = 0;
}
}
可以判断什么时候可以切换到下一页。
private void ListView_ItemTapped(object sender, Syncfusion.ListView.XForms.ItemTappedEventArgs e)
{
if(0 == flag)
{
Navigation.PushAsync(new ContentPage());
}
}
方案二:(推荐)
SfListView有一个方法是ItemHolding。不使用其他按钮也可以交换SelectionMode。
Xaml 代码不同的是添加SfListView这个方法。
<sync:SfListView x:Name="listView"
SelectionGesture="Hold"
SelectionMode="Multiple"
ItemTapped="ListView_ItemTapped"
SelectionBackgroundColor="Transparent"
ItemHolding="ListView_ItemHolding" // ItemHolding
IsStickyHeader="True" ItemSize="70">
当 OnHolding 可以在这里做某事时:
private void ListView_ItemHolding(object sender, ItemHoldingEventArgs e)
{
if (0 == flag)
{
listView.SelectionGesture = TouchGesture.Tap;
ToolbarItemsButton.Text = "Done";
flag = 1;
}
else
{
listView.SelectionGesture = TouchGesture.Hold;
ToolbarItemsButton.Text = "MultipleSelect";
flag = 0;
}
}
判断什么时候可以切换到下一页。
private void ListView_ItemTapped(object sender, Syncfusion.ListView.XForms.ItemTappedEventArgs e)
{
if(0 == flag)
{
Navigation.PushAsync(new ContentPage());
}
}
方案三:(此处不推荐)
一般对于listview的单元格的多选,我们会处理自定义单元格的模板,比如在模板中添加一个按钮。点击时可以将item标记为选中,也可以自定义item的UI为选中时的样式。