title: Why is binding not updating picker selected item
body: <p>I have a <code>Picker</code> in my Xamarin form, bound to a model (code below).</p>
  
  <p>The <code>Load</code> method sets <code>SelectedVehicle</code> but the picker does not show the selected vehicle. When the page is first loaded the picker shows the correct item in the list. But on a page reload after <code>App.VehicleId</code> has been changed, the picker shows blank.</p>
  
  <p>Even if I explicitly set <code>SelectedIndex</code> on the picker during <code>OnAppearing</code>, the picker shows blank, and the <code>SelectedIndex</code> has been set back to <code>-1</code> when I look later.</p>
  
  <p>How do I correctly update the picker selection when the page is reloaded?</p>
  
  <p>Xaml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8" ?&gt;
  &lt;ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
               xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
               xmlns:local="clr-namespace:DefectReport"
               x:Class="DefectReport.MainPage"&gt;
      &lt;ContentPage.Content&gt;
          &lt;ScrollView&gt;
              &lt;StackLayout&gt;
                  &lt;Label x:Name="Message" TextColor="Red" /&gt;
                  &lt;Label Text="Welcome to Vehicle Check" /&gt;
                  &lt;Label Text="Choose vehicle" /&gt;
                  &lt;Picker ItemsSource="{Binding Vehicles}" ItemDisplayBinding="{Binding RegistrationNumber}" SelectedItem="{Binding SelectedVehicle}" SelectedIndexChanged="Picker_SelectedIndexChanged" /&gt;
                  &lt;Label Text="{Binding SelectedVehicle.Description}" /&gt;
                  &lt;Button Text="Add vehicle not in list" Clicked="SelectVehicle_Clicked" /&gt;
                  &lt;Button Text="Check vehicle" Clicked="CheckVehicle_Clicked" /&gt;
                  &lt;Button Text="Log out" Clicked="LogOut_Clicked" /&gt;
              &lt;/StackLayout&gt;
          &lt;/ScrollView&gt;
      &lt;/ContentPage.Content&gt;
  &lt;/ContentPage&gt;
  </code></pre>
  
  <p>The code behind is this:</p>
  
  <pre><code>public partial class MainPage : ContentPage {
      public class VehicleInfo : Model {
          public async void Load() {
              Vehicles = new ObservableCollection&lt;Vehicle&gt;(await App.Database.ReadAsync&lt;Vehicle&gt;().ToListAsync());
              SelectedVehicle = Vehicles.FirstOrDefault(v =&gt; 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&lt;Vehicle&gt; vehicles;
  
          public ObservableCollection&lt;Vehicle&gt; 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();
      }
  </code></pre>
  
  <p><code>Model</code> is a trivial class implementing <code>INotifyPropertyChanged</code>:</p>
  
  <pre><code>public class Model : System.ComponentModel.INotifyPropertyChanged {
      public void OnPropertyChanged(string name) {
          if (PropertyChanged != null)
              PropertyChanged(this, new PropertyChangedEventArgs(name));
      }
  
      public event PropertyChangedEventHandler PropertyChanged;
  }
  </code></pre>