I have a control with a combobox:
<ComboBox x:Name="TraceComboBox"
                  ItemsSource="{Binding SingleChannelList}" 
                  SelectedItem="{Binding RelativeSource={RelativeSource  FindAncestor, AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}}, Path=SelectedTrace, Mode=TwoWay}"
                  >
Here's the PropertyChangedCallback for the Property "SelectedTrace" in the OuterControl containing the ComboBox:
 private static void OnSelectedTraceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            OuterControl oc = d as OuterControl ;
            oc.UpdateSelectedTrace();
        }
 private void UpdateSelectedTrace()
        {
            ViewModelType vm = DataContext as ViewModelType;
            if (vm != null)
            {
                if (vm.SingleChannelList != null)
                {
                    SelectedTrace = vm.SingleChannelList[0];
                }
            }
        }
By my logic, the following should happen:
I select the 3rd object in the ComboBox (SingleChannelList[2]), and the change handler occurs. It then goes into the UpdateSelectedTrace() routine. At this point, the value of SelectedTrace is of course SingleChannelList[2]. Now, the UpdateSelectedTrace() routine forcibly sets the SelectedTrace property to the 1st object in the list (SingleChannelList[0]), which fires another change handler nested inside the first. "SelectedTrace" now equals SingleChannelList[0], and so the ComboBox should also show SingleChannelList[0] as its selection.
ALL of this happens when I follow with the debugger until the bold-faced last sentence, which instead plays out like this:
"SelectedTrace" now equals SingleChannelList[0], but the ComboBox displays SingleChannelList[2] as it's selected item. I tried UpdatingTarget on the BindingExpression and still, the SelectedTrace Property holds the value SingleChannelList[0] while the ComboBox continues to show SingleChannelList[2]. These bindings are secure and tested and have always worked until I tried to do this. Can anyone tell me why this doesn't work correctly?
Thank you