我通過 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個贊
這應該是直接的:
確保
PropertyChanged
在設置Trades
屬性后觸發事件確保此事件在 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);
- 1 回答
- 0 關注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消