首页 > 解决方案 > 如何访问多个 Xamarin“选择器”中的选定参数

问题描述

我在 Lucas Zhang 的帮助下创建了一个自定义选择器,您可以查看链接 xamarin custom multiple picker

现在我对这个问题还有另一个问题。当用户选择一个或多个组时,我需要访问这些选定的参数。

public class Grup
{
    public int ID { get; set; }
    public string GroupName { get; set; }
    public Nullable<int> SubsID { get; set; }
}

这是我使用的模型。Picker 通过 ViewModel 读取 Groupnames,如下所示。

public class NewUserViewModel
{
    public List<Grup> GroupList { get; set; }
    public List<Grup> SelectedGroup { get; set; }
}

我想将来自视图中每个选择器的这些参数保存到这里,此外我将通过 API 将它们发送到数据库。问题是当用户选择它们并单击保存按钮时如何访问这些 ID。

标签: c#androidiosvisual-studioxamarin

解决方案


一个简单的方法是监听选择器的选择事件,然后通过迭代获得每个选择的结果pickerStack

像这样(基于 Lucas Zhang 的样本):

PickerView中:

[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PickerView : ContentView
{
    public Group SelectGroup; // add the SelectGroup property which save the result after you select
    public ObservableCollection<Group> pickerSource { get; set; }

    public PickerView(ObservableCollection<Group> source) //here i change the source to your Group model
    {
        InitializeComponent();

        picker.ItemsSource = source;
    }

    private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
    {
        var stack = this.Parent as StackLayout;

        stack.Children.Remove(this);
    }

    private void picker_SelectedIndexChanged(object sender, EventArgs e)
    {
        var picker = sender as Picker;
        SelectGroup = (Group)picker.SelectedItem;    
    }
}

PickerView.xaml中添加SelectedIndexChanged事件:

<Picker Grid.Column="0" x:Name="picker" Title="{Binding GroupName}" ItemDisplayBinding="{Binding ID}"  TitleColor="Red"  SelectedIndexChanged="picker_SelectedIndexChanged" />   

在您的页面中:

public partial class MutiPicker : ContentPage
{
    public MutiPicker()
    {
        InitializeComponent();
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        var source = new ObservableCollection<Group>() { new Group() { ID=111,GroupName="AAA",SubsID=1}, new Group() { ID = 222, GroupName = "BBB", SubsID = 2 }, new Group() { ID = 333, GroupName = "CCC", SubsID = 3 } };

        pickerStack.Children.Add(new PickerView(source));
    }

    //iterate over your pickerviews
    private void Update_Clicker(object sender, EventArgs e)
    {
        foreach (var pickerview in pickerStack.Children)
        {

            if (pickerview is PickerView && ((PickerView)pickerview).SelectGroup != null)
            {
                var selectgroup = ((PickerView)pickerview).SelectGroup;//here you will get your select group,then you could get its ID ,GroupName or SubsID 
            }

        }
    }
}

推荐阅读