Xamarin形成SFListview多选问题

时间:2019-03-06 08:48:02

标签: xamarin.forms syncfusion

我在xamarin表单应用程序中使用syncfusion SFListview。我实现了https://help.syncfusion.com/xamarin/sflistview/selection?cs-save-lang=1&cs-lang=xaml.It的listview单元格的mul​​tiselect效果很好。但是我面临的问题是每次我们需要保留itemcell进行选择时。可以仅对第一个单元格保持按住并轻按所有其他单元格的多重选择吗?

1 个答案:

答案 0 :(得分:2)

  

是否可以仅对第一个单元格保留多选,而对其他所有单元格都轻按?

确定可以做到。如果您想要多选项目,我想接下来的步骤将完成一些有关多选项目的任务。下图可能看起来像您想要的。

您可以在共享链接中查看this chapter的内容,并提供它提供的the sample code

解决方案一 :(通常可接受)

如果项目不介意在外部添加控制按钮,那么这将是最快,最简单的方法。也就是说,在ToolbarItems中添加NavigationPage,使用它来控制是否可以单击多个选择而无需跳到下一页。

添加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中,添加标志以判断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());
    }

}

enter image description here enter image description here

解决方案二 :(推荐)

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());
    }

}

解决方案三 :(此处不推荐)

通常,对于列表视图单元格的多重选择,我们将处理自定义单元格的模板,例如在模板中添加按钮。单击时,可以将项目标记为选中状态,也可以将其用户界面自定义为选中样式。