从Xamarin中的Picker获取选定值

时间:2016-08-04 09:50:08

标签: xamarin.forms picker

我从Web服务获取数据,我将其加载到Picker中。现在我想调用一个新的Web服务来获取与所选项目相关的一些数据。但我没有得到那个选定的项目。

我使用下面的类模型从Web服务获取数据并将其加载到Picker中。

public class ModelGetEmployeeList
{
    public string ServiceStatus { get; set; }
    public List<EmployeeList> EmpList { get; set; }
}

public class EmployeeList
{
    public string uid { get; set; }
    public string fname { get; set; }
    public string lname { get; set; }
}

这是我在Picker中加载数据的方式:

if (response.IsSuccessStatusCode)
{
    var content = await response.Content.ReadAsStringAsync ();
    var Items = JsonConvert.DeserializeObject <ModelGetEmployeeList> (content);

    foreach(EmployeeList emp in Items.EmpList)
    {
        pickerEmployee.Items.Add(emp.uid.ToString()+"-"+emp.fname.ToString()+" "+emp.lname.ToString());
    }
}

现在我正在实施SelectedIndexChanged这样的事件:

public void PickerEmployee_SelectedIndexChanged(object sender, SelectedItemChangedEventArgs e)
{
    if (pickerEmployee.SelectedIndex == -1) 
    {
        //Message
    } 
    else
    {
        var item = sender as EmployeeList;
        var selectedItem = item.uid;

        DisplayAlert (selectedItem.ToString (), "OK", "OK");
    }
}

但它给我一个错误,上面的方法有错误的签名。

6 个答案:

答案 0 :(得分:2)

根据Xamarin.Forms Picker documentation SelectedIndexChanged事件,期待与EventHandler委托人匹配的委托(EventHandler documentation

因此,您必须更改方法的签名:

public void PickerEmployee_SelectedIndexChanged(object sender, EventArgs e)
{
    ...
}

答案 1 :(得分:1)

你的签名错了。

以下代码也是错误的:

var item = sender as EmployeeList;
var selectedItem = item.uid;

请在下面找到更正后的版本:

    public void PickerEmployee_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (pickerEmployee.SelectedIndex == -1) 
        {
            //Message
        } 
        else
        {                
            var selectedItem = PickerEmployee[SelectedIndex]; 
            DisplayAlert (selectedItem, "OK", "OK");
        }
    }

Xamarin表单选择器只会获取添加到列表而不是对象的字符串。

如果您需要该对象,您可以使用原始lsit上的selectedIdex来获取对象:

var selectedEmp = Items.EmpList[SelectedIndex];

或者您可以使用Bindable Picker

答案 2 :(得分:1)

您可以使用以下选项获取所选值:

 string selectedEmployee = string.Empty; 

 selectedEmployee = pickerEmployee.Items[pickerEmployee.SelectedIndex];

答案 3 :(得分:0)

setup.py

答案 4 :(得分:0)

Items集合是一个字符串列表,因此您可以使用SelectedIndex

获取当前选定的值
 var selectedValue = picker.Items [picker.SelectedIndex];

如果您正在使用绑定,则yes,exposed属性是SelectedIndex。

有关详情,请点击here

答案 5 :(得分:0)

public void PickerEmployee_SelectedIndexChanged(object sender, SelectedItemChangedEventArgs e)
{
    if (pickerEmployee.SelectedIndex == -1) 
    {
        //Message
    } 
    else
    {
        var item = sender as Picker;
        var selectedItem = item.SelectedItem as EmployeeList;
        var uid =selectedItem.uid;
        DisplayAlert (uid .ToString (), "OK", "OK");
    }
}