无法在Xamarin表单中设置Picker的默认值

时间:2018-11-08 09:34:01

标签: c# xamarin xamarin.forms

我在项目中习惯了Picker。我可以成功显示选择器中的所有项目,但没有问题,但是对于更新功能,我无法显示选择器的默认项目,

我用过method()SelectedItem,但在我的情况下却无济于事。

有人可以解释SelectedIndexSelectedItem的工作原理吗

我的代码:

SelectedIndex

在视图模型中:

<Picker Title="Select Gender" Margin="0,0,0,-5" ItemsSource="{Binding GenderList}"  x:Name="pkrGender" ItemDisplayBinding="{Binding Name}" >

和性别阶层:

public class MainViewModel : BaseViewModel 
{
 // Which is bind to ItemSource of the picker
 public ObservableCollection<Gender> GenderList { get; set; }    

 public class Gender: BaseViewModel {
  private Genders _gender {
   get;
   set;
  }

  public Gender(Genders gender) {
   this._gender = gender;
  }


  public string Name {
   get {
    return _gender.name;
   }

   set {
    _gender.name = value;
    OnPropertyChanged("Name");
   }
  }

 }
 public void APICALL()
 { 
   // Getting values from API
 }

}   

我正在像这样在ViewModel中添加值:

public class Genders
{
   public string Name {get;set;}
   public string Code {get;set;}
}

但是无法绑定默认值。在我的情况下,他在注册时选择了Male,因此Male应该是选择器的Default值。

1 个答案:

答案 0 :(得分:1)

从根本上讲,我认为您在OnPropertyChanged属性中缺少GenderList方法。结果,您的Picker被绑定到一个空列表。

我发现以下对我有用:

private List<Genders> listOfGenders = new List<Genders>();

public List<Genders> GenderList
{
    get => listOfGenders;
    set 
    {
        listOfGenders = value;
        OnPropertyChanged(nameof(GenderList));
    }
}

private void AddToGenderList(params Gender[] genders)
{
    if (listOfGenders == null)
    {
        listOfGenders = new List<Genders>();
    }

    foreach(Gender gender in genders)
    {
        listOfGenders.Add(gender);
    }

    GendersList = listOfGenders;
}

SelectedItemSelectedIndex如何工作?

SelectedItem从与Picker关联的列表中返回选定的对象。对于您的情况,它将返回您选择的Gender对象。

SelectedIndex返回列表中所选项目的索引。

分配默认值

要分配默认值,请首先确保列表不为空。例如,下面的代码(从上面的代码扩展)应该可以工作:

(在您的C#中)

private int currentSelectedIndex = 0;

public int CurrentSelectedIndex
{
    get => currentSelectedIndex;
    set
    {
        currentSelectedIndex = value;
        OnPropertyChanged(nameof(CurrentSelectedIndex));
    }
}

public MainViewModel()
{
    AddToGenderList(new Gender[] 
    {
        new Gender
        {
            Name = "Male",
            Code = "M"
        },
        new Gender
        {
            Name = "Female",
            Code = "F"
        },
        new Gender
        {
            Name = "Other",
            Code = "O"
        }
        // Add more if necessary
    });

    // Set the default to "Male"
    CurrentSelectedIndex = 0;
}

(在您的XAML中)

<Picker 
    Title="Select Gender" 
    Margin="0,0,0,-5" 
    ItemsSource="{Binding GenderList}"  
    SelectedIndex="{Binding CurrentSelectedIndex}"
    x:Name="pkrGender" 
    ItemDisplayBinding="{Binding Name}" />