繁体   English   中英

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

[英]Unable to set default value for Picker in Xamarin forms

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

我使用了SelectedItemSelectedIndex但在我的情况下没有任何效果。

有人可以解释SelectedItemSelectedIndex工作原理,

我的代码:

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

}   

和性别类:

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

我在ViewModel中添加值,例如:

// From API Response Getting the list of Genders
var genderList = APICALL();
foreach (Genders gender in genderList)
{
    GendersList.Add(new Genders(gender));
}

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

从根本上说,我认为你缺少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}" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM