[英]Unable to set default value for Picker in Xamarin forms
我在项目中习惯了Picker。 我可以成功显示选择器中的所有项目,但没有问题,但是对于更新功能,我无法显示选择器的默认项目,
我使用了SelectedItem
和SelectedIndex
但在我的情况下没有任何效果。
有人可以解释SelectedItem
和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
}
}
和性别类:
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;
}
SelectedItem
和SelectedIndex
如何工作? 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.