title: UWP - x:Bind Mode=TwoWay throws errors without converter
body: <p>There was a similar question to this, but the answer seemed to be off-base to the original question.</p>
  
  <p>I've got a DataTemplate that has 3 comboboxes in it. The first two work fine, but the 3rd throws a compiler error.</p>
  
  <pre><code>&lt;ComboBox ItemsSource="{x:Bind ListOne, Mode=OneWay}" 
                SelectedItem="{Binding SelectedOne, Mode=TwoWay}"
                DisplayMemberPath="Name"/&gt;
  &lt;ComboBox ItemsSource="{x:Bind ListTwo}" 
                SelectedItem="{x:Bind SelectedTwo, Mode=TwoWay, Converter={StaticResource GenericConverter}}"
                DisplayMemberPath="Name"/&gt;
  &lt;ComboBox ItemsSource="{x:Bind ListThree}" 
                SelectedItem="{x:Bind SelectedThree, Mode=TwoWay}"
                DisplayMemberPath="Name"/&gt;
  </code></pre>
  
  <p>For ListOne, the "Binding" works perfectly as is.</p>
  
  <p>For ListTwo, the "x: Bind" only works if a value converter is added. The "GenericConverter" only returns the "value" passed in. Other than that, it does nothing.</p>
  
  <p>For ListThree, without a value converter, the compiler throws an error:</p>
  
  <blockquote>
    <p>"Invalid binding path 'SelectedThree': Cannot bind type 'IdNameVm' to
    'SystemObject' without a converter.</p>
  </blockquote>
  
  <p>In all cases, the ItemSource is an ObservableCollection and the selected items are of type IdNameVm.</p>
  
  <p>Using the converter works, but it feels wrong to be forced to put in a dummy converter on x: Bind just to get the XAML to compile.</p>
  
  <p>As requested, here is how the ObservableCollection is defined plus the IdNameVm:</p>
  
  <pre><code>public ObservableCollection&lt;IdNameVm&gt; ListOne { get; set; }
  
  
  public class IdNameVm : BindableBase
  {
      private int _id;
      private string _name;
  
      public int Id
      {
          get { return _id; }
          set { Set(ref _id, value); }
      }
  
      public string Name
      {
          get { return _name; }
          set { Set(ref _name, value); }
      }
  
      protected bool Equals(IdNameVm other)
      {
          return Id == other.Id;
      }
  
      public override bool Equals(object obj)
      {
          if (ReferenceEquals(null, obj)) return false;
          if (ReferenceEquals(this, obj)) return true;
          if (obj.GetType() != this.GetType()) return false;
          return Equals((IdNameVm)obj);
      }
  
      public override int GetHashCode()
      {
          unchecked
          {
              var hashCode = Id;
              return hashCode;
          }
      }
  }
  </code></pre>