【发布时间】:2011-01-04 16:47:47
【问题描述】:
我有一个带有ComboBox 的控件:
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
这是包含 ComboBox 的 OuterControl 中属性 SelectedTrace 的 PropertyChangedCallback:
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]),这会触发嵌套在第一个对象中的另一个更改处理程序。 “SelectedTrace”现在等于 SingleChannelList[0],因此 ComboBox 也应该将 SingleChannelList[0] 显示为其选择。
当我跟随调试器直到最后一句粗体字出现时,所有这些都会发生,而是像这样播放:
SelectedTrace 现在等于SingleChannelList[0],但ComboBox 将SingleChannelList[2] 显示为其选定项。我在BindingExpression 上尝试了UpdatingTarget,但SelectedTrace 属性仍然保留SingleChannelList[0] 的值,而ComboBox 继续显示SingleChannelList[2]。这些绑定是安全且经过测试的,并且在我尝试这样做之前一直有效。谁能告诉我为什么这不能正常工作?
谢谢
【问题讨论】:
标签: wpf data-binding binding dependency-properties onchange