C# 为什么绑定不更新选取器选定项
我有一个Xamarin表单中的C# 为什么绑定不更新选取器选定项,c#,xamarin,binding,picker,C#,Xamarin,Binding,Picker,我有一个Xamarin表单中的选择器,绑定到一个模型(代码如下) Load方法设置SelectedVehicle,但选择器不显示所选车辆。第一次加载页面时,选择器会在列表中显示正确的项。但是在App.VehicleId更改后重新加载页面上,选择器显示为空白 即使我在出现时在选择器上显式设置了SelectedIndex,选择器也会显示为空,并且当我稍后查看时,SelectedIndex已被设置回-1 重新加载页面时,如何正确更新选择器选择 Xaml: 原来问题是创建了一个新的可观察集合。我改了密码
选择器
,绑定到一个模型(代码如下)
Load
方法设置SelectedVehicle
,但选择器不显示所选车辆。第一次加载页面时,选择器会在列表中显示正确的项。但是在App.VehicleId
更改后重新加载页面上,选择器显示为空白
即使我在出现时在选择器上显式设置了SelectedIndex,选择器也会显示为空,并且当我稍后查看时,SelectedIndex
已被设置回-1
重新加载页面时,如何正确更新选择器选择
Xaml:
原来问题是创建了一个新的
可观察集合
。我改了密码
Vehicles = new ObservableCollection<Vehicle>(await App.Database.ReadAsync<Vehicle>().ToListAsync());
Vehicles=newobserveCollection(等待App.Database.ReadAsync().ToListAsync());
而是清除现有集合,并向其中添加新记录
public partial class MainPage : ContentPage {
public class VehicleInfo : Model {
public async void Load() {
Vehicles = new ObservableCollection<Vehicle>(await App.Database.ReadAsync<Vehicle>().ToListAsync());
SelectedVehicle = Vehicles.FirstOrDefault(v => v.DeviceRecordId == App.VehicleId) ?? Vehicles.FirstOrDefault();
System.Diagnostics.Debug.WriteLine("App.VehicleId = " + App.VehicleId);
System.Diagnostics.Debug.WriteLine("SelectedVehicle.Id = " + selectedVehicle.DeviceRecordId);
}
private Vehicle selectedVehicle;
public Vehicle SelectedVehicle {
get { return selectedVehicle; }
set {
if (selectedVehicle != value) {
selectedVehicle = value;
OnPropertyChanged("SelectedVehicle");
}
}
}
private ObservableCollection<Vehicle> vehicles;
public ObservableCollection<Vehicle> Vehicles {
get { return vehicles; }
set {
if (vehicles != value) {
vehicles = value;
OnPropertyChanged("Vehicles");
}
}
}
}
VehicleInfo data;
public MainPage() {
data = new VehicleInfo();
BindingContext = data;
InitializeComponent();
}
protected override void OnAppearing() {
base.OnAppearing();
data.Load();
}
public class Model : System.ComponentModel.INotifyPropertyChanged {
public void OnPropertyChanged(string name) {
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
public event PropertyChangedEventHandler PropertyChanged;
}
Vehicles = new ObservableCollection<Vehicle>(await App.Database.ReadAsync<Vehicle>().ToListAsync());