亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何綁定 Picker 異步?

如何綁定 Picker 異步?

C#
慕少森 2023-08-13 15:42:37
我通過 httpClient 將一些值加載到列表中?,F在我想將此列表綁定到選擇器。但選擇器是空的。我有一個包含不同項目的“貿易”課程,例如標題。ViewModel(FirmsViewModel)有以下代碼: public async Task GetTradesData()        {            var tradeList = await App.RestService.GetTradesAsync(true);            Trades = new ObservableCollection<Trade>(tradeList);        }“交易”列表已滿。到目前為止,它似乎正在發揮作用。在我的 Page.cs 文件中,我有以下代碼:public FirmsPage()        {            InitializeComponent();            viewModel = new FirmsViewModel();            BindingContext = viewModel;        }protected async override void OnAppearing()        {            base.OnAppearing();            await viewModel.GetTradesData();        }選擇器的 XAML: <Picker SelectedIndex="{Binding TradesSelectedIndex, Mode=TwoWay}"                ItemsSource="{Binding Trades}"                ItemDisplayBinding="{Binding title}"                Margin="0,15,0,0"                Title="Select a Trade"></Picker>如果您正在運行代碼,則選取器始終為空。有什么建議么?謝謝。
查看完整描述

1 回答

?
精慕HU

TA貢獻1845條經驗 獲得超8個贊

這應該是直接的:

  1. 確保PropertyChanged在設置Trades屬性后觸發事件

  2. 確保此事件在 UI 線程上觸發

因此,如果假設您的聲明Trades如下所示:

public ObservableCollection<Trade> Trades { get; private set; }

你打電話就可以了。RaisePropertyChanged("Trades");(或者 ViewModel 類型中的任何等效項)在分配它之后立即GetTradesData()

或者,您可以更改您的財產聲明:

private ObservableCollection<Trade> _trades;

public ObservableCollection<Trade> Trades

{

    get => _trades;

    set

    {

        _trades = value;

        RaisePropertyChanged("Trades");

    }

}

或者我個人更喜歡的是,簡單地從頭開始初始化 ObservableCollection 并簡單地將項目添加到其中GetTradesData():


public ObservableCollection<Trade> Trades { get; } = new ObservableCollection<Trade>();

并在GetTradesData():


foreach (var trade in tradeList)

    Trades.Add(trade);


查看完整回答
反對 回復 2023-08-13
  • 1 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號