Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么绑定不更新选取器选定项_C#_Xamarin_Binding_Picker - Fatal编程技术网

C# 为什么绑定不更新选取器选定项

C# 为什么绑定不更新选取器选定项,c#,xamarin,binding,picker,C#,Xamarin,Binding,Picker,我有一个Xamarin表单中的选择器,绑定到一个模型(代码如下) Load方法设置SelectedVehicle,但选择器不显示所选车辆。第一次加载页面时,选择器会在列表中显示正确的项。但是在App.VehicleId更改后重新加载页面上,选择器显示为空白 即使我在出现时在选择器上显式设置了SelectedIndex,选择器也会显示为空,并且当我稍后查看时,SelectedIndex已被设置回-1 重新加载页面时,如何正确更新选择器选择 Xaml: 原来问题是创建了一个新的可观察集合。我改了密码

我有一个Xamarin表单中的
选择器
,绑定到一个模型(代码如下)

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());