【问题标题】:Xamarin forms SFListview multiselect issueXamarin 形成 SFListview 多选问题
【发布时间】:2019-03-07 17:52:30
【问题描述】:

我在我的 xamarin 表单应用程序中使用了 syncfusion SFListview。我从https://help.syncfusion.com/xamarin/sflistview/selection?cs-save-lang=1&cs-lang=xaml.It 实现了listview 单元的多选工作正常。但是我面临的问题是每次我们需要保持itemcell 进行选择。是否可以进行仅适用于第一个单元格并点击所有其他单元格的多选?

【问题讨论】:

    标签: xamarin.forms syncfusion


    【解决方案1】:

    是否可以进行仅适用于第一个单元格并点击所有其他单元格的多选?

    当然可以。如果你想要多选项目,我想接下来的步骤会做一些关于多选项目的任务。下面的图片可能看起来像你想要的。

    您可以在分享链接中查看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判断SelectionModeListView

    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为选中时的样式。

    【讨论】:

    • 感谢江老师的回复。我实现了这一点。但是 selectionimage 只会在我持有 listview 单元格时显示。我还有其他用于点击列表视图单元格的操作。那么如何添加那个圆形选择按钮?我该如何实现呢?
    • @AndroDevil 你先试试SelectionMode="Multiple" 吗?
    • Jiang 我提供了 ItemTapped="List_Tapped" SelectionMode="Multiple" SelectionGesture="Hold" 多选工作正常。问题是每次我应该握住单元格进行选择。我只希望多重选择能够像按住第一个单元格并点击所有其他单元格一样工作。在我的情况下,列表视图的正常点击将转到另一个屏幕
    • 好吧,我明白了。你想按住一个项目,然后每个项目显示多选状态,其他项目只需点击即可选择而不转到另一个页面。另外,我认为在这个案例,当你需要结束多选操作时,它也需要一个关闭多选的方法。是吗?
    • @AndroDevil 已更新。如果有帮助,记得标记它。谢谢!
    猜你喜欢
    • 2018-12-07
    • 2018-10-30
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多