如何进行多选列表视图并获取所选项目?

时间:2019-03-15 10:00:09

标签: xamarin xamarin.forms xamarin.android xamarin.ios

我有汽车品牌的列表视图。我正在做一个基本的调查应用程序,用户需要选择所有适用的应用程序。到目前为止,我只能根据在线教程获得一个选定的项目。有没有一种方法可以选择列表并获取值?或我还可以做些什么来实现这一目标?

var listView = new ListView();
listView.ItemsSource = new string[]
{
  "Honda",
  "Toyota",
  "Ford",
  "Tesla"
};

2 个答案:

答案 0 :(得分:1)

首先,不要将字符串数组分配给ItemsSource。将您的ItemsSource绑定到ObservableCollection。当您执行此操作时,只要您更改集合,列表就会更新。有关更多信息,请查看here

第二,开箱即用Xamarin.Forms不提供选择多个项目的选项。不过,您可以在these instructions

之后执行此操作

答案 1 :(得分:1)

您需要做的第一件事是制作一个通用的东西,如下所示:

public class SelectableData<T> 
{ 
  public T Data { get; set; }
  public bool Selected { get; set; } 
}

接下来,您将要创建ListView,该ListView显示数据和Switch。在此示例中,我的数据仅包含名称和描述。然后,包装器将包含选定的布尔值。

<ListView ItemsSource="{Binding DataList}" Margin="20">
<ListView.ItemTemplate> 
    <DataTemplate> 
        <ViewCell> 
            <Grid Margin="0,0,0,10"> 
                <Grid.ColumnDefinitions> 
                    <ColumnDefinition Width="*" /> 
                    <ColumnDefinition Width="Auto" /> 
                </Grid.ColumnDefinitions> 
                <StackLayout VerticalOptions="CenterAndExpand"> 
                    <Label Text="{Binding Data.Name}"  /> 
                    <Label Text="{Binding Data.Description}" FontSize="10" /> 
                </StackLayout> 
                <Switch IsToggled="{Binding Selected}" Grid.Column="1" /> 
            </Grid> 
        </ViewCell> 
    </DataTemplate> 
</ListView.ItemTemplate>
</ListView>

然后将ListView与以下内容绑定:

public ObservableCollection<SelectableData<ExampleData>> DataList { get; set; }

ExampleData类似于:

 public class ExampleData
{
  public string Name { get; set; }
  public string Description { get; set; }
}

要获取选定的项目,请为每个循环使用DataList进行迭代,并检查“选定的属性”,如下所示:

foreach(var item in DataList)
{
   item.Selected // true if selected else false.
}