我通过 httpClient 将一些值加载到列表中。现在我想将此列表绑定到选择器。但选择器是空的。我有一个包含不同项目的“贸易”课程,例如标题。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 回答
![?](http://img1.sycdn.imooc.com/545861e40001199702200220-100-100.jpg)
精慕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 关注
- 117 浏览
添加回答
举报
0/150
提交
取消