title: WPF Binding in ComboBox with UserControl list
body: <p>In two combobox A and B.
  A's ItemsSource is Custom list. and B's ItemsSource is UserControl list.
  When manually setting the SelectedItem, A combobox works well, but B combobox UI do not show the selected Item. (In debugging, SelectedItem's value mapping is right, but the combobox B's UI do not be changed.)
  All the other structure is same between A and B. What is the reason?</p>
  
  <p>MainWindow.xaml</p>
  
  <pre><code> ...
  &lt;ComboBox ItemsSource="{Binding FruitList}" SelectedItem="{Binding SelectedFruit}"
    DisplayMemberPath="FruitName"  /&gt;
  &lt;Button Content="Button" HorizontalAlignment="Left"  
  VerticalAlignment="Top" Width="75" Click="Button_Click"/&gt;
  
  &lt;ComboBox ItemsSource="{Binding UserControlList}" SelectedItem="{Binding SelectedUserControl}" DisplayMemberPath="ItemName"  /&gt;
      &lt;Button Content="Button" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="75" Click="Button_Click2"/&gt;
  &lt;/Grid&gt;
  </code></pre>
  
  <p></p>
  
  <p>MainWindow.xaml.cs</p>
  
  <pre><code>public partial class MainWindow : Window, INotifyPropertyChanged
  {
      public MainWindow()
      {
          InitializeComponent();
          this.DataContext = this;
  
          FruitList.Add(f1);
          FruitList.Add(f2);
          FruitList.Add(f3);
  
          UserControlList.Add(u1);
          UserControlList.Add(u2);
          UserControlList.Add(u3);
  
      }
  
      Fruit f1 = new Fruit { FruitName = "Apple" };
      Fruit f2 = new Fruit { FruitName = "Banana" };
      Fruit f3 = new Fruit { FruitName = "Lemon" };
  
      MyUserControl u1 = new MyUserControl { ItemName = "Apple" };
      MyUserControl u2 = new MyUserControl { ItemName = "Banana" };
      MyUserControl u3 = new MyUserControl { ItemName = "Lemon" };
  
      ObservableCollection&lt;Fruit&gt; _FruitList = new ObservableCollection&lt;Fruit&gt;();
      public ObservableCollection&lt;Fruit&gt; FruitList
      {
          get { return _FruitList; }
          set
          {
              _FruitList = value;
              OnPropertyChanged();
          }
      }
  
      Fruit _SelectedFruit;
      public Fruit SelectedFruit
      {
          get { return _SelectedFruit; }
          set
          {
              _SelectedFruit = value;
              OnPropertyChanged();
          }
      }
  
  
  
      ObservableCollection&lt;MyUserControl&gt; _UserControlList = new ObservableCollection&lt;MyUserControl&gt;();
      public ObservableCollection&lt;MyUserControl&gt; UserControlList
      {
          get
          {
              return _UserControlList;
          }
          set
          {
              _UserControlList = value;
              OnPropertyChanged();
          }
      }
      MyUserControl _SelectedUserControl;
      public MyUserControl SelectedUserControl
      {
          get { return _SelectedUserControl; }
          set
          {
              _SelectedUserControl = value;
              OnPropertyChanged();
          }
      }
  
      public event PropertyChangedEventHandler PropertyChanged;
  
      void OnPropertyChanged([CallerMemberName] string caller = "")
      {
          if (PropertyChanged != null)
          {
              PropertyChanged(this, new PropertyChangedEventArgs(caller));
          }
      }
  
  
      private void Button_Click(object sender, RoutedEventArgs e)
      {
          this.SelectedFruit = f3;
      }
  
      private void Button_Click2(object sender, RoutedEventArgs e)
      {
          this.SelectedUserControl = u3;
      }
  }
  
  public class Fruit
  {
      public string FruitName { get; set; }
  }
  </code></pre>
  
  <p>}</p>
  
  <p>UserControl</p>
  
  <pre><code>public partial class MyUserControl : UserControl
  {
      public MyUserControl()
      {
          InitializeComponent();
  
      }
  
      public string ItemName { get; set; }
  }
  </code></pre>