2016-05-06 21 views
8

Bir ülke seçmek için XAMARIN seçici kullanıyorum. Ülkeler seçicide sabit kodlanmış. Her ülke adını bir anahtar değer üzerinden tanımlayabilmemin bir yolu var mı? Bunu SAPUI5 kullanarak benzer şekilde yaptım.Seçici öğelerindeki öğeler için önemli değerler ekleme

Benzer şekilde, XAMARIN form seçicide her ülke için bir anahtar değer eklemem mümkün mü?

cevap

3

Hayır, Anahtar özellik xamarin seçici'de kullanılabilir. Ancak, xamarin seçici sınıfının Dictionary class ve SelectedIndex özelliğini kullanarak uygulayabilirsiniz.

şu kod parçacığını kullanarak bu Uygulanışı:

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

      } 
     } 

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

5

Veri Bağlantısı kullanan bir Seçici Anahtar-Değer-Çiftlerini kullanmanın bir yolu yoktur.

İlk olarak, Formu Form Görünümü Modelinde tanımlamanız ve Sözlüklerin Anahtar/Değer Çiftleri Listesini döndüren bir Özellik tanımlamanız gerekir. Ayrıca seçili Öğe için bir Bağlama gereklidir:

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

İkinci Eğer Toplayanlar tanımında Toplayanlar ItemsSource, ItemDisplayBinding ve SelectedItem Bağlar ayarlamak zorunda:

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

bu göz önüne alındığında, elde edebilirsiniz https://developer.xamarin.com/guides/xamarin-forms/user-interface/picker/populating-itemssource/#Populating_a_Picker_with_Data_Using_Data_Binding

:

SelectedItem.Key 

ayrıntılı Okuma yoluyla Görünüm Modeli seçilen Item anahtar

+0

Mükemmel kod örneği. Hala nasıl birlikte çalıştığını tam olarak anlamaya çalışıyorum, ancak bulabildiğim en basit örnek. Bunu yapmak isteyebilecek başka herkes için oldukça kolay bir şekilde arkasındaki kodda bulunan SelectedItem'in anahtarına ve değerlerine erişebildim. – Tim

+0

Bu özelliği, xaml'deki seçiciye ekleyin ve sonra herhangi bir yöntemi adlandırın. Bu yöntemi xaml.cs public void OnPickerChangedEvent (nesne gönderen, EventArgs e) { var toplayıcı = (Picker) gönderici; var myIndex = picker.SelectedIndex; var myData = this.MyViewModel.SelectedItem.Key; } – Tim