Mam kontroli z ComboBox
:Zmiana wartości DependencyProperty wewnątrz PropertyChangedCallback dla tego DependencyProperty
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
oto PropertyChangedCallback
dla właściwości SelectedTrace
w OuterControl zawierający 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];
}
}
}
Według mojej logiki, powinny nastąpić następujące zdarzenia:
I selec t trzeci obiekt w obiekcie ComboBox
(SingleChannelList[2]
) i pojawia się procedura zmiany. Następnie przechodzi do rutyny UpdateSelectedTrace()
. W tym momencie wartość SelectedTrace
jest oczywiście SingleChannelList[2]
. Teraz, procedura UpdateSelectedTrace()
przymusowo ustawia właściwość SelectedTrace
na pierwszy obiekt na liście (SingleChannelList[0]
), który uruchamia inną procedurę zmiany zagnieżdżoną wewnątrz pierwszego. "SelectedTrace" teraz równa się SingleChannelList [0], więc ComboBox powinien również pokazywać SingleChannelList [0] jako swój wybór.
Wszystko to dzieje się, gdy śledzę z debuggera aż do wytłuszczoną ostatnim zdaniu, w którym zamiast tego gra się tak:
SelectedTrace
teraz równa SingleChannelList[0]
, ale ComboBox
wyświetlacze SingleChannelList[2]
jako wybranego elementu. Próbowałem UpdatingTarget
na BindingExpression
i nadal, SelectedTrace
Właściwość posiada wartość SingleChannelList[0]
, podczas gdy ComboBox
nadal wyświetla SingleChannelList[2]
. Te wiązania są bezpieczne i sprawdzone i zawsze działały, dopóki nie spróbowałem tego zrobić. Czy ktoś może mi powiedzieć, dlaczego to nie działa poprawnie?
Dziękuję
Zauważyłem, że biorąc pod uwagę, że oryginalna zmiana pochodzi z pola, które się zmienia, to nadal nie działa. Zamiast tego po prostu mocno ustawiam pudełko po tym, jak wszystko jest gotowe i działa dobrze. Hacky, ale działa. Prawdziwe pytanie brzmi: DLACZEGO nie działa mój pierwotny scenariusz? – Kamiikoneko