我有一個ComboBox
控制:更改PropertyChangedCallback內DependencyProperty的價值爲DependencyProperty的
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
這裏是在OuterControl包含ComboBox
的PropertyChangedCallback
該物業SelectedTrace
:
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];
}
}
}
按照我的邏輯,下列情況應該發生:
我選擇t ComboBox
(SingleChannelList[2]
)中的第3個對象,並且發生更改處理程序。然後進入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]
。這些綁定是安全和測試,並一直工作,直到我試圖做到這一點。任何人都可以告訴我爲什麼這不能正常工作?
謝謝
我發現,假設原來的變化源自正在改變的框,這仍然不起作用。相反,我只是在完成所有工作後很難設置盒子,並且工作正常。克里,但工作。真正的問題是爲什麼我的原始方案沒有工作? – Kamiikoneko 2010-01-15 14:08:48