簡體   English   中英

Xamarin表單選擇器設置了所選項目

[英]xamarin forms picker set selected item

對於我的Xamarin Forms應用程序,我使用選擇器選擇測驗類別的子類別。

<Picker x:Name="subCategory" Title="SUBCategory" ItemsSource="{Binding SubCategories}" ItemDisplayBinding="{Binding Subcategory}" SelectedItem="{Binding selSubCategories, Mode=TwoWay}" />

默認情況下,選擇器的文本標題為SUBCategory,但我想將其更改為從api調用中獲得的項之一。

首先,我從視圖加載了ItemSource並嘗試設置SelectedItem,但沒有成功。

然后,根據不同的網站,將其更改為ViewModel以加載數據並設置所選項目。 已從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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM