ich ein Steuerelement mit einem ComboBox
haben:Ändern des Wertes eines DependencyProperty innerhalb des PropertyChangedCallback für die DependencyProperty
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
Hier ist die PropertyChangedCallback
für Immobilien SelectedTrace
im OuterControl die ComboBox
enthält:
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];
}
}
}
Nach meiner Logik sollte folgendes passieren:
I selec t das dritte Objekt in der ComboBox
(SingleChannelList[2]
), und der Change-Handler tritt auf. Es geht dann in die UpdateSelectedTrace()
Routine. An diesem Punkt ist der Wert SelectedTrace
natürlich SingleChannelList[2]
. Jetzt setzt die UpdateSelectedTrace()
-Routine zwangsweise die SelectedTrace
-Eigenschaft auf das erste Objekt in der Liste (SingleChannelList[0]
), das einen anderen Änderungshandler auslöst, der in der ersten verschachtelt ist. "SelectedTrace" entspricht nun SingleChannelList [0], daher sollte ComboBox auch SingleChannelList [0] als Auswahl anzeigen.
All dies geschieht, wenn ich mit dem Debugger, bis dem bold-faced letzten Satz folgen, die stattdessen wie folgt ausspielt:
SelectedTrace
jetzt gleich SingleChannelList[0]
, aber die ComboBox
zeigt SingleChannelList[2]
als ausgewähltes Element. Ich versuchte UpdatingTarget
auf der BindingExpression
und noch, die SelectedTrace
Eigenschaft hält den Wert SingleChannelList[0]
, während die ComboBox
weiterhin SingleChannelList[2]
zeigt. Diese Bindungen sind sicher und getestet und haben immer funktioniert, bis ich das versuchte. Kann mir jemand sagen, warum das nicht richtig funktioniert?
Danke
Ich fand, dass, da die ursprüngliche Änderung von der Box stammt, die sich ändert, dies immer noch nicht funktioniert. Stattdessen setze ich die Box einfach fest, nachdem alles fertig ist und es funktioniert gut. Hacky aber funktioniert. Die eigentliche Frage lautet: WARUM funktioniert mein ursprüngliches Szenario nicht? – Kamiikoneko