2016-08-04 13 views
0

Ich erhalte Daten von einem Web-Service und ich lade es in Picker. Jetzt möchte ich einen neuen Webservice aufrufen, um einige Daten zu dem ausgewählten Objekt zu erhalten. Aber ich bekomme den ausgewählten Gegenstand nicht.Erhalten ausgewählten Wert von Picker in Xamarin

Ich verwende unter Klassenmodell, um Daten von Web-Service zu erhalten und in Picker zu laden.

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; } 
} 

Dies ist, wie ich Daten in Picker geladen:

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()); 
    } 
} 

Jetzt SelectedIndexChanged Ereignis wie dieses Ich bin der Umsetzung:

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"); 
    } 
} 

Aber sein gibt mir einen Fehler, dass obige Verfahren hat falsch Unterschrift.

Antwort

2

Nach dem Xamarin.FormsPicker documentationSelectedIndexChanged Ereignis erwartet Delegierten, die EventHandler Delegierten Spiele (EventHandler documentation)

So müssen Sie Signatur Ihrer Methode ändern:

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

Ohh .. Danke. Dieses Problem ist zu lösen, aber es ist ein neuer Fehler aufgetreten. Objektreferenz ist nicht auf ** var selectedItem = item.uid gesetzt; ** – Dipak

1

Ihre Unterschrift ist.

auch folgende Code ist falsch:

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

Bitte geben Sie die korrigierte Version unten finden:

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

Die Xamarin Forms Picker werden Sie nur die Zeichenfolge erhalten, die in die Liste aufgenommen wurde und nicht das Objekt.

Wenn Sie das Objekt entweder Sie können die selectedIdex auf Ihrem ursprünglichen lsit, um das Objekt zu erhalten:

var selectedEmp = Items.EmpList[SelectedIndex]; 

Oder Sie können einen Bindable Picker verwenden.

+0

Danke, mein Herr. Ich muss den ausgewählten Text verwenden. Ich trennte UID und Angestelltennamen mit "Strich", damit ich uid ohne Zugriff auf Objekt erhalten kann. – Dipak

0

können Sie sellected Wert mit diesem nehmen:

string selectedEmployee = string.Empty; 

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

Die Items-Auflistung ist eine Liste von Strings, so können Sie die aktuell ausgewählte Wert SelectedIndex mit bekommen

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

Wenn Sie verwenden Binding dann ja, die exposed-Eigenschaft ist der SelectedIndex.

Für weitere Informationen klicken Sie auf here

Verwandte Themen