为该DependencyProperty更改PropertyChangedCallback内的DependencyProperty的值

时间:2010-01-13 15:37:40

标签: wpf data-binding binding dependency-properties onchange

我有一个ComboBox的控件:

<ComboBox x:Name="TraceComboBox"
          ItemsSource="{Binding SingleChannelList}" 
          SelectedItem="{Binding RelativeSource={RelativeSource  FindAncestor,
                         AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
                         Path=SelectedTrace, Mode=TwoWay}">

以下是包含PropertyChangedCallback的OuterControl中属性SelectedTrace的{​​{1}}:

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)中的第3个对象,然后发生更改处理程序。然后它进入SingleChannelList[2]例程。此时,UpdateSelectedTrace()的值当然是SelectedTrace。现在,SingleChannelList[2]例程强制将UpdateSelectedTrace()属性设置为列表中的第一个对象(SelectedTrace),这会触发嵌套在第一个对象中的另一个更改处理程序。 “SelectedTrace”现在等于SingleChannelList [0],因此ComboBox也应该显示SingleChannelList [0]作为其选择。

所有这一切都发生在我跟随调试器,直到粗体的最后一句话,而不是像这样:

SingleChannelList[0]现在等于SelectedTrace,但SingleChannelList[0]显示ComboBox作为其所选项目。我在SingleChannelList[2]上尝试UpdatingTargetBindingExpression属性保留值SelectedTrace,而SingleChannelList[0]继续显示ComboBox。这些绑定是安全的并经过测试,并且一直有效,直到我尝试这样做。谁能告诉我为什么这不能正常工作?

谢谢

2 个答案:

答案 0 :(得分:2)

这听起来像是依赖属性'价值强制'的场景。值强制将属性的值“推送”为基于期望值的有效值。在这里阅读更多相关信息:

Dependency Property Callbacks and Validation

答案 1 :(得分:0)

我相信这是WPF框架的性能优化。属性更新的起源不会获得propertychanged事件(以及绑定等效事件)来重新更新自身,因为它是更改的起源。您可以使用在绑定中使用IdentityConverter(只返回传入值的ValueConverter)强制更新。