我有一个控制ComboBox
:
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
这是OuterControl 中包含的PropertyChangedCallback
属性:SelectedTrace
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”现在等于 SingleChannelList[0],因此 ComboBox 也应该将 SingleChannelList[0] 显示为其选择。SelectedTrace
SingleChannelList[0]
当我跟随调试器直到最后一句粗体字出现时,所有这一切都会发生,而是像这样播放:
SelectedTrace
现在等于SingleChannelList[0]
,但ComboBox
显示SingleChannelList[2]
为其选定项。我试过UpdatingTarget
了BindingExpression
,但SelectedTrace
属性仍然保持值SingleChannelList[0]
,而ComboBox
继续显示SingleChannelList[2]
。这些绑定是安全且经过测试的,并且在我尝试这样做之前一直有效。谁能告诉我为什么这不能正常工作?
谢谢