У меня есть элемент управления с ComboBox
:
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
Вот PropertyChangedCallback
для свойства SelectedTrace
в OuterControl, содержащем 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];
}
}
}
По моей логике должно произойти следующее:
Я выбираю третий объект в ComboBox
(SingleChannelList[2]
), и происходит изменение обработчика. Затем он входит в рутину UpdateSelectedTrace()
. На данный момент значение SelectedTrace
, конечно, SingleChannelList[2]
. Теперь подпрограмма UpdateSelectedTrace()
принудительно устанавливает свойство SelectedTrace
для 1-го объекта в списке (SingleChannelList[0]
), который запускает другой обработчик изменений, вложенный в первый. «SelectedTrace» теперь равняется SingleChannelList [0], поэтому ComboBox также должен показывать SingleChannelList [0] в качестве выбора.
ВСЕ это происходит, когда я слежу за отладчиком до последнего предложения, выделенного жирным шрифтом, которое вместо этого звучит так:
SelectedTrace
теперь равно SingleChannelList[0]
, но ComboBox
отображает SingleChannelList[2]
в качестве выбранного элемента. Я пробовал UpdatingTarget
на BindingExpression
, и все же свойство SelectedTrace
содержит значение SingleChannelList[0]
, в то время как ComboBox
продолжает показывать SingleChannelList[2]
. Эти привязки безопасны и проверены и всегда работали, пока я не попытался это сделать. Может кто-нибудь сказать мне, почему это не работает правильно?
Спасибо