title: Reset combobox selected item on set using MVVM
body: <p>I am using a ComboBox in my WPF application and following MVVM. There is a list of strings which I want to show in my ComboBox.</p>
  
  <p>XAML:</p>
  
  <pre><code>&lt;ComboBox ItemsSource="{Binding ItemsCollection}" SelectedItem="{Binding SelectedItem}" /&gt;
  </code></pre>
  
  <p>View Model:</p>
  
  <pre><code>public Collection&lt;string&gt; ItemsCollection; // Suppose this has 10 values.
  private string _selectedItem;
  public string SelectedItem
  {
      get { return _selectedItem; }
      set
      {
          _selectedItem = value;
          Trigger Notify of property changed.
      }
  }
  </code></pre>
  
  <p>Now this code is working absolutely fine. I am able to select from view and I can get changes in ViewModel and if I change SelectedItem from my ViewModel I can see it in my view.</p>
  
  <p>Now here is what I am trying to achieve. When I change selected item from my view I need to put a check that value is good/bad (or anything) set selected item else do not set it. So my view model changes like to this.</p>
  
  <pre><code>public string SelectedItem
  {
      get { return _selectedItem; }
      set
      {
          if (SomeCondition(value))
              _selectedItem = value;           // Update selected item.
          else
              _selectedItem = _selectedItem;   // Do not update selected item.
          Trigger Notify of property changed.
      }
  }
  </code></pre>
  
  <p>Now when I execute this code and SomeCondition(value) returns false, SelectedItem returns old string value, but in my view selected item in ComboBox is the the value which I selected. So lets assume I have collection of 10 strings showing in my ComboBox. All values are good except second and fourth element (SomeCondition returns false for 2nd and 4th value). What I want that if I select 2nd or 4th element selectedItem do not change. But my code is not doing this properly. If I select 2nd element then view still displays 2nd element as selected. I know there is something wrong in my code. But what is it?</p>