Tengo un control con un ComboBox
:Cambiar el valor de una propiedad de dependencia dentro de la PropertyChangedCallback para que DependencyProperty
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
Aquí está la PropertyChangedCallback
para la propiedad SelectedTrace
en el OuterControl que contiene el 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];
}
}
}
Según mi lógica, debería ocurrir lo siguiente:
Selecciono el tercer objeto en el ComboBox
(SingleChannelList[2]
) y se produce el controlador de cambios. Luego pasa a la rutina UpdateSelectedTrace()
. En este punto, el valor de SelectedTrace
es, por supuesto, SingleChannelList[2]
. Ahora, la rutina UpdateSelectedTrace()
establece forzosamente la propiedad SelectedTrace
en el primer objeto de la lista (SingleChannelList[0]
), que desencadena otro controlador de cambios anidado dentro del primero. "SelectedTrace" ahora es igual a SingleChannelList [0], por lo que el ComboBox también debería mostrar SingleChannelList [0] como su selección.
todo esto sucede cuando sigo con el depurador hasta que la negrita enfrentado última frase, que en vez juega como esto:
SelectedTrace
ahora es igual a SingleChannelList[0]
, pero las pantallas ComboBox
SingleChannelList[2]
como su elemento seleccionado. Intenté UpdatingTarget
en el BindingExpression
y aún así, la propiedad SelectedTrace
tiene el valor SingleChannelList[0]
mientras que el ComboBox
continúa mostrando SingleChannelList[2]
. Estos enlaces son seguros y probados y siempre han funcionado hasta que intenté hacer esto. ¿Alguien puede decirme por qué esto no funciona correctamente?
Gracias
Encontré que dado que el cambio original proviene de la caja que está cambiando, esto todavía no funciona. En su lugar, configuro la caja una vez que todo está hecho y funciona bien. Hacky pero funciona La verdadera pregunta es ¿POR QUÉ no funciona mi escenario original? – Kamiikoneko