我在项目中习惯了Picker。我可以成功显示选择器中的所有项目,但没有问题,但是对于更新功能,我无法显示选择器的默认项目,
我用过method()
和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
}
}
我正在像这样在ViewModel中添加值:
public class Genders
{
public string Name {get;set;}
public string Code {get;set;}
}
但是无法绑定默认值。在我的情况下,他在注册时选择了Male,因此Male应该是选择器的Default值。
答案 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;
}
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}" />