2016-05-06 15 views
8

Używam selektora XAMARIN do wybrania kraju. Kraje są zakodowane w selektorze. Czy istnieje sposób, w jaki mogę zidentyfikować nazwę każdego kraju za pomocą wartości klucza. Zrobiłem to w podobny sposób, używając SAPUI5.Dodawanie wartości klucza dla elementów w selektorze

<core:Item key="AF" text="Afghanistan " /> 
<core:Item key="AL" text="Albania " /> 
<core:Item key="DZ" text="Algeria " /> 
<core:Item key="VI" text="Amer.Virgin Is. " /> 

Czy istnieje sposób, aby dodać kluczową wartość dla każdego kraju w selektorze formularzy XAMARIN?

Odpowiedz

3

Nie, właściwość Klucz jest dostępna w selektorze Xamarin. Ale można go zaimplementować przy użyciu klasy Dictionary i SelectedIndex klasy selektora xamarin.

wdrożyć go za pomocą kodu następujący fragment:

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

      } 
     } 

Źródło: https://developer.xamarin.com/api/type/Xamarin.Forms.Picker/

5

Jest sposób korzystania klucz-wartość par w próbniku użyciem Wiązanie danych.

Najpierw należy zdefiniować słownik w Modelu widoku formularza i zdefiniować właściwość, która zwraca listę par klucz-wartość słowników. wiążącej do aktualnie wybranego elementu również jest potrzebna:

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

drugie trzeba ustawić zbieracze ItemsSource, ItemDisplayBinding i SelectedItem Wiązania w definicji zbieraczy:

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

Biorąc pod uwagę to, można uzyskać klucz od wybranego elementu w widoku modelu poprzez

SelectedItem.Key 

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

+0

Doskonała próbka kodu. Wciąż staram się w pełni zrozumieć, jak to wszystko działa razem, ale najprostszy przykład, jaki mogłem znaleźć. Byłem w stanie uzyskać dostęp do klucza i wartości SelectedItem w kodzie za bardzo łatwo dla każdego, kto mógłby chcieć to zrobić. – Tim

+0

Dodaj tę właściwość do selektora w Xaml, a następnie nazwij dowolną metodę. Wywołaj tę metodę w publicznej pustce xaml.cs OnPickerChangedEvent (obiekt nadawca, EventArgs e) { var picker = (Picker) nadawca; var myIndex = picker.SelectedIndex; var myData = this.MyViewModel.SelectedItem.Key; } – Tim