私はコントロールを持っていComboBoxます:
<ComboBox x:Name="TraceComboBox"
ItemsSource="{Binding SingleChannelList}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type cc:LogicTriggerSimpleLevelControl}},
Path=SelectedTrace, Mode=TwoWay}">
を含む OuterControl のプロパティは次のとおりPropertyChangedCallbackです。SelectedTraceComboBox
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];
}
}
}
私の論理では、次のことが起こるはずです。
ComboBox( )内の 3 番目のオブジェクトを選択するSingleChannelList[2]と、変更ハンドラーが発生します。その後、UpdateSelectedTrace()ルーチンに入ります。この時点で、 の値SelectedTraceはもちろんSingleChannelList[2]です。ここで、ルーチンはプロパティをリスト ( ) の最初のオブジェクトにUpdateSelectedTrace()強制的に設定し、最初のオブジェクト内にネストされた別の変更ハンドラーを起動します。 "SelectedTrace" は SingleChannelList[0] と等しくなったため、ComboBox にも SingleChannelList[0] が選択として表示されるはずです。SelectedTraceSingleChannelList[0]
これはすべて、太字の最後の文までデバッガーを使用すると発生します。代わりに、次のように再生されます。
SelectedTraceは に等しくなりSingleChannelList[0]ましたが、は選択されたアイテムとしてComboBox表示SingleChannelList[2]されます。を試しUpdatingTargetてみましたがBindingExpression、SelectedTraceプロパティは値SingleChannelList[0]を保持し、 はComboBox引き続き表示されSingleChannelList[2]ます。これらのバインディングは安全でテスト済みであり、私がこれを試みるまでは常に機能していました。これが正しく機能しない理由を誰か教えてもらえますか?
ありがとうございました