【问题标题】:Getting selected value from Picker in Xamarin从 Xamarin 中的 Picker 获取选定的值
【发布时间】:2018-11-10 19:10:46
【问题描述】:

我正在从 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");
    }
}

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

【问题讨论】:

    标签: xamarin.forms picker


    【解决方案1】:

    您可以通过以下方式获取所选价值:

     string selectedEmployee = string.Empty; 
    
     selectedEmployee = pickerEmployee.Items[pickerEmployee.SelectedIndex];
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 哦.. 谢谢。此问题已解决,但出现了新错误。 var selectedItem = item.uid; 处未设置对象引用
      【解决方案3】:

      您的签名错误。

      以下代码也是错误的:

      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 Forms 选择器将只获取添加到列表中的字符串,而不是对象。

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

      var selectedEmp = Items.EmpList[SelectedIndex];
      

      或者您可以使用Bindable Picker。

      【讨论】:

      • 谢谢先生。我需要从选定的文本中获取 uid。我用“破折号”分隔了 uid 和员工姓名,这样我就可以在不访问对象的情况下获取 uid。
      【解决方案4】:
      public void PickerEmployee_SelectedIndexChanged(object sender, EventArgs e)
      {
          if (pickerEmployee.SelectedIndex == -1) 
          {
              //Message
          } 
          else
          {                
              var selectedItem = (EmployeeList)PickerEmployee.SelectedItem; 
              DisplayAlert (selectedItem.fname, "OK", "OK");
          }
      }
      

      【讨论】:

        【解决方案5】:
        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");
            }
        }
        

        【讨论】:

          【解决方案6】:

          Items 集合是一个字符串列表,因此您可以使用 SelectedIndex 获取当前选定的值

           var selectedValue = picker.Items [picker.SelectedIndex];
          

          如果您使用的是绑定,那么是的,公开的属性是 SelectedIndex。

          更多信息请点击here

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-16
            • 1970-01-01
            • 1970-01-01
            • 2020-12-17
            • 1970-01-01
            • 2017-11-01
            相关资源
            最近更新 更多