我有汽车品牌的列表视图。我正在做一个基本的调查应用程序,用户需要选择所有适用的应用程序。到目前为止,我只能根据在线教程获得一个选定的项目。有没有一种方法可以选择列表并获取值?或我还可以做些什么来实现这一目标?
var listView = new ListView();
listView.ItemsSource = new string[]
{
"Honda",
"Toyota",
"Ford",
"Tesla"
};
答案 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.
}