I have a ComboBox of Employers. Upon selecting an Employer, a table is populated with Employer specific data:
        <ComboBox Name="EmployerListBox"
                  IsReadOnly="True"
                  ItemsSource="{Binding EmployerCollection, UpdateSourceTrigger=PropertyChanged}"
                  SelectedItem="{Binding SelectedEmployer, UpdateSourceTrigger=PropertyChanged}" 
                  Width="150" />
Here is the property to which it is binding and a method that checks to see if the table is dirty. If the table is dirty, then the user is prompted that changes will be lost if they change Employer:
    /// <summary>
    /// Selected Employer
    /// </summary>
    public String SelectedEmployer
    {
        get
        {
            return _SelectedEmployer;
        }
        set
        {
            if (_SelectedEmployer != value && CanChangeEmployer())
            {
                _SelectedEmployer = value;
                NotifyPropertyChanged(m => m.SelectedEmployer);
                GetGarnishmentsTableView();
            }
        }
    }
    private String _SelectedEmployer = "";
    /// <summary>
    /// Method that executes each time user wants to change employers
    /// </summary>
    public Boolean CanChangeEmployer()
    {
        Boolean _returnValue = true;
        if (GarnishmentsTableIsDirty)
        {
            _returnValue = false;
            MessageBoxResult _change =
                MessageBox.Show("There are unsaved changes.  " +
                                "Changing Employers will lose any unsaved changes.  \n\n" +
                                "Are you sure you want to change Employers?", "Unsaved Changes", MessageBoxButton.YesNo);
            if (_change == MessageBoxResult.Yes)
            {
                // OK to switch employers
                _returnValue = true;
            }
        }
        return _returnValue;
    }
Everything appears to work correctly:
- User selects Employer ('KMH') which updates table.
 - User makes a change to the table.
 - User then selects a different Employer ('MPC')
 - User is prompted that changes will be lost
 - User selects 'No' and CanChangeEmployers returns 'false'
 - SelectedEmployer does NOT change (skips the if {} block)
 
Yet back in the GUI the Employer option changes to the Employer the user selected ('MPC'), even though SelectedEmployer hasn't changed.
When I Snoop the ComboBox, I see that that ComboBox SelectedItem is correctly set to the original Employer ('KMH') but SelectedValue and SelectionBoxItem are both set to the new Employer ('MPC').
I then tried binding ComboBox->SelectedValue to SelectedEmployer:
        <ComboBox Name="EmployerListBox"
                  IsReadOnly="True"
                  ItemsSource="{Binding EmployerCollection, UpdateSourceTrigger=PropertyChanged}"
                  SelectedValue="{Binding SelectedEmployer, UpdateSourceTrigger=PropertyChanged}" 
                  Width="150" />
And the GUI is the same, incorrect company being displayed. But this time Snoop shows that ComboBox->SelectedValue is correctly set to the original Employer ('KMH') but SelectedItem and SelectionBoxItem are both set to the new Employer ('MPC').
How do I correctly bind SelectedEmployer so that the GUI matches the selected employer?