2016-05-06 6 views
8

Sto utilizzando un selettore XAMARIN per selezionare un paese. I paesi sono codificati nel selezionatore. C'è un modo per identificare il nome di ciascun paese attraverso un valore chiave. Ho fatto questo in modo simile usando SAPUI5.Aggiunta di valori chiave per gli articoli nel selettore

Analogamente, c'è un modo per me di aggiungere un valore chiave per ogni paese nel selettore di form XAMARIN?

risposta

3

No, la proprietà chiave è disponibile nel selettore xamarin. Tuttavia, è possibile implementarlo utilizzando la classe Dictionary e la proprietà SelectedIndex della classe xamarin picker.

attuarlo utilizzando seguente frammento di codice:

class PickerDemoPage : ContentPage 
     { 
      // Dictionary to get Color from color name. 
      Dictionary<string, Color> nameToColor = new Dictionary<string, Color> 
      { 
       { "Aqua", Color.Aqua }, { "Black", Color.Black }, 
       { "Blue", Color.Blue }, { "Fuschia", Color.Fuschia }, 
       { "Gray", Color.Gray }, { "Green", Color.Green }, 
       { "Lime", Color.Lime }, { "Maroon", Color.Maroon }, 
       { "Navy", Color.Navy }, { "Olive", Color.Olive }, 
       { "Purple", Color.Purple }, { "Red", Color.Red }, 
       { "Silver", Color.Silver }, { "Teal", Color.Teal }, 
       { "White", Color.White }, { "Yellow", Color.Yellow } 
      }; 

      public PickerDemoPage() 
      { 
       Label header = new Label 
       { 
        Text = "Picker", 
        FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label)), 
        HorizontalOptions = LayoutOptions.Center 
       }; 

       Picker picker = new Picker 
       { 
        Title = "Color", 
        VerticalOptions = LayoutOptions.CenterAndExpand 
       }; 

       foreach (string colorName in nameToColor.Keys) 
       { 
        picker.Items.Add(colorName); 
       } 

       // Create BoxView for displaying picked Color 
       BoxView boxView = new BoxView 
       { 
        WidthRequest = 150, 
        HeightRequest = 150, 
        HorizontalOptions = LayoutOptions.Center, 
        VerticalOptions = LayoutOptions.CenterAndExpand 
       }; 

       picker.SelectedIndexChanged += (sender, args) => 
        { 
         if (picker.SelectedIndex == -1) 
         { 
          boxView.Color = Color.Default; 
         } 
         else 
         { 
          string colorName = picker.Items[picker.SelectedIndex]; 
          boxView.Color = nameToColor[colorName]; 
         } 
        }; 

       // Accomodate iPhone status bar. 
       this.Padding = new Thickness(10, Device.OnPlatform(20, 0, 0), 10, 5); 

       // Build the page. 
       this.Content = new StackLayout 
       { 
        Children = 
        { 
         header, 
         picker, 
         boxView 
        } 
       }; 

      } 
     } 

Fonte: https://developer.xamarin.com/api/type/Xamarin.Forms.Picker/

5

C'è un modo di utilizzare chiave valore di coppie in un selettore utilizzando Data Binding.

Per prima cosa è necessario definire il dizionario nel modello di vista del modulo e definire una proprietà che restituisce un elenco di coppie valore-chiave di dizionari. Inoltre è necessaria una rilegatura per l'elemento selezionato:

class MyViewModel 
{ 
    ... 
    private Dictionary<string, string> PickerItems = 
    new Dictionary<string, string>() { {"AF", "Afghanistan"}, {"AL", "Albania" } }; 

    public List<KeyValuePair<string, string>> PickerItemList 
    { 
     get => PickerItems.ToList(); 
    } 

    private KeyValuePair<string, string> _selectedItem; 
    public KeyValuePair<string, string> SelectedItem 
    { 
     get => _selectedItem; 
     set => _selectedItem = value; 
    } 
    ... 
} 

In secondo luogo è necessario impostare il Pickers ItemsSource, ItemDisplayBinding e SelectedItem Associazioni nella definizione Pickers:

<Picker 
    ItemDisplayBinding="{Binding Value}" 
    ItemsSource="{Binding PickerItemList}" 
    SelectedItem="{Binding SelectedItem}" /> 

Detto questo, è possibile ottenere il chiave della voce selezionata nel Model View tramite

SelectedItem.Key 

Letture consigliate: https://developer.xamarin.com/guides/xamarin-forms/user-interface/picker/populating-itemssource/#Populating_a_Picker_with_Data_Using_Data_Binding

+0

Esempio di codice eccellente. Sto ancora cercando di capire come funziona tutto insieme, ma l'esempio più semplice che ho trovato. Sono stato in grado di accedere alla chiave e ai valori di SelectedItem nel codice dietro abbastanza facilmente per chiunque altro volesse farlo. – Tim

+0

Aggiungi questa proprietà al selettore in xaml, quindi assegna un nome a qualsiasi metodo. Chiama quel metodo nel vuoto pubblico xaml.cs OnPickerChangedEvent (oggetto mittente, EventArgs e) { var picker = (Picker) mittente; var myIndex = picker.SelectedIndex; var myData = this.MyViewModel.SelectedItem.Key; } – Tim

Problemi correlati