我正在通过httpClient将一些值加载到列表中。现在我想把这个列表绑定到一个Picker上。但那人是空的。
我有一个课程“贸易”与不同的项目,如标题。
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>如果您正在运行代码,则选择程序始终是空的。有什么建议吗?谢谢。
发布于 2019-08-07 07:37:04
这应该是直接的:
PropertyChanged属性后触发Trades事件因此,如果假设您的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);https://stackoverflow.com/questions/57388915
复制相似问题