xamarin 表单选择器设置所选项目
xamarin forms picker set selected item
对于我的 Xamarin Forms 应用程序,我使用选择器 select 测验类别的子类别。
<Picker x:Name="subCategory" Title="SUBCategory" ItemsSource="{Binding SubCategories}" ItemDisplayBinding="{Binding Subcategory}" SelectedItem="{Binding selSubCategories, Mode=TwoWay}" />
默认情况下,选择器的文本标题为 SUBCategory,但我想将其更改为我从 api 调用中获得的项目之一。
起初,我从视图加载 ItemSource 并尝试设置 SelectedItem,但没有成功。
然后我根据不同的网站将其更改为 ViewModel 以加载数据并设置 selected 项目。项目已从 ViewModel 正确加载,但 SelectedItem 仍然没有成功。我也尝试过 SelectedIndex,但它不起作用,但我更喜欢 SelectedItem,因为这是我从字面上得到的值。
public class QuizPageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
CheetahApi api = new CheetahApi();
public QuizPageViewModel()
{
GetSubCategories();
}
SubCategory countries =
new SubCategory() { Subcategory="Olympische Spelen"}
;
public SubCategory selSubCategories;
private ObservableCollection<SubCategory> _subCategories = new ObservableCollection<SubCategory>();
public ObservableCollection<SubCategory> SubCategories
{
get { return _subCategories; }
set
{
_subCategories = value;
OnPropertyChanged(nameof(SubCategories));
}
}
private async void GetSubCategories()
{
var subCat = await api.GetSubCategories("sport");
foreach (var sub in subCat)
{
SubCategories.Add(sub);
}
selSubCategories = subCat.FirstOrDefault(a => a.Subcategory == "Olympische Spelen");
}
protected virtual void OnPropertyChanged(string propertyName)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
型号
public class SubCategory
{
public int Id { get; set; }
public string Category { get; set; }
public string Subcategory { get; set; }
}
有没有人知道如何将选择器的默认文本设置为源中的一项?
您需要为 SelectedItem 字段实现 OnPropertyChanged,例如:
private SubCategory _selSubCategories;
public SubCategory selSubCategories
{
get { return _selSubCategories; }
set
{
_selSubCategories = value;
OnPropertyChanged(nameof(selSubCategories));
}
}
对于我的 Xamarin Forms 应用程序,我使用选择器 select 测验类别的子类别。
<Picker x:Name="subCategory" Title="SUBCategory" ItemsSource="{Binding SubCategories}" ItemDisplayBinding="{Binding Subcategory}" SelectedItem="{Binding selSubCategories, Mode=TwoWay}" />
默认情况下,选择器的文本标题为 SUBCategory,但我想将其更改为我从 api 调用中获得的项目之一。
起初,我从视图加载 ItemSource 并尝试设置 SelectedItem,但没有成功。
然后我根据不同的网站将其更改为 ViewModel 以加载数据并设置 selected 项目。项目已从 ViewModel 正确加载,但 SelectedItem 仍然没有成功。我也尝试过 SelectedIndex,但它不起作用,但我更喜欢 SelectedItem,因为这是我从字面上得到的值。
public class QuizPageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
CheetahApi api = new CheetahApi();
public QuizPageViewModel()
{
GetSubCategories();
}
SubCategory countries =
new SubCategory() { Subcategory="Olympische Spelen"}
;
public SubCategory selSubCategories;
private ObservableCollection<SubCategory> _subCategories = new ObservableCollection<SubCategory>();
public ObservableCollection<SubCategory> SubCategories
{
get { return _subCategories; }
set
{
_subCategories = value;
OnPropertyChanged(nameof(SubCategories));
}
}
private async void GetSubCategories()
{
var subCat = await api.GetSubCategories("sport");
foreach (var sub in subCat)
{
SubCategories.Add(sub);
}
selSubCategories = subCat.FirstOrDefault(a => a.Subcategory == "Olympische Spelen");
}
protected virtual void OnPropertyChanged(string propertyName)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
型号
public class SubCategory
{
public int Id { get; set; }
public string Category { get; set; }
public string Subcategory { get; set; }
}
有没有人知道如何将选择器的默认文本设置为源中的一项?
您需要为 SelectedItem 字段实现 OnPropertyChanged,例如:
private SubCategory _selSubCategories;
public SubCategory selSubCategories
{
get { return _selSubCategories; }
set
{
_selSubCategories = value;
OnPropertyChanged(nameof(selSubCategories));
}
}