Ho un controllo con un ComboBox
:Cambiando il valore di un DependencyProperty all'interno del PropertyChangedCallback per quella DependencyProperty
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
Ecco il PropertyChangedCallback
per la proprietà SelectedTrace
nel OuterControl contenente la 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];
}
}
}
Secondo la mia logica, dovrebbe succedere quanto segue:
I selec t il terzo oggetto nello ComboBox
(SingleChannelList[2]
) e si verifica il gestore delle modifiche. Passa quindi alla routine UpdateSelectedTrace()
. A questo punto, il valore di SelectedTrace
è ovviamente SingleChannelList[2]
. Ora, la routine UpdateSelectedTrace()
imposta forzatamente la proprietà SelectedTrace
sul primo oggetto nell'elenco (SingleChannelList[0]
), che attiva un altro gestore di modifiche nidificato all'interno del primo. "SelectedTrace" ora equivale a SingleChannelList [0], quindi anche il ComboBox dovrebbe mostrare SingleChannelList [0] come selezione.
Tutto ciò avviene quando seguo con il debugger fino a quando l'ultima frase in grassetto-affrontato, che gioca invece come questo:
SelectedTrace
ora uguale SingleChannelList[0]
, ma i ComboBox
display SingleChannelList[2]
come la sua voce selezionata. Ho provato UpdatingTarget
su BindingExpression
e ancora, la proprietàdetiene il valore SingleChannelList[0]
mentre il continua a mostrare SingleChannelList[2]
. Questi attacchi sono sicuri e testati e hanno sempre funzionato fino a quando non ho provato a farlo. Qualcuno può dirmi perché questo non funziona correttamente?
si
Ho trovato che dato che la modifica originale proviene dalla casella che sta cambiando, questo ancora non funziona. Invece mi limito a impostare la scatola dopo che tutto è finito e funziona bene. Hacky ma funziona. La vera domanda è perché il mio scenario originale non funziona? – Kamiikoneko