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