修正しようとすればするほど、.NET のバグのように感じられる MultiValueConverter に問題があります。ここに何が起きているかです:
同様の MultiBinding 定義を使用して、Stackpanel とユーザー コントロール (UC) の両方の IsEnabled プロパティをバインドしています (もちろん、<ns:usercontrolname.IsEnabled>
UC に使用しています)。
<StackPanel.IsEnabled>
<MultiBinding Converter="{StaticResource InfoSectionIsEnabled}">
<Binding Path="IsInactive" />
<Binding Path="IsWaitingForMicro" />
</MultiBinding>
</StackPanel.IsEnabled>
「現在の」UC (この XAML を含むもの) が TabItem.Content に割り当てられています。DataContext は TabItem で設定されます。
また、同じ「現在の」UC の 2 つの個別の単一値バインディングで上記のプロパティを使用しています。
<scps:ucSOIA x:Name="ucSOIA" IsEnabled="{Binding Path=IsWaitingForMicro, Converter={StaticResource InvertBool}}"/>
と
<scps:ucMisc x:Name="ucMisc" IsEnabled="{Binding Path=IsInactive, Converter={StaticResource InvertBool}}"/>
「現在の」UC が最初にインスタンス化され、TabItem のコンテンツに割り当てられると、すべてのバインディングが正常に機能します。しかし、TabItem のコンテンツを (インスタンス化された「現在の」UC を破棄せずに) 別の UC に変更するとすぐに、すべてのコンバーターが再度呼び出され、MultiValueConverter のvalues()
パラメーターにNamedObject
両方の全体が含まれます。まったく同じプロパティを使用する単一値コンバーターは正常に動作します。
私はこれを理解することはできません。MultiBindings で RelativeSource を使用してみましたが、役に立ちませんでした。
2 つの質問があります。
NamedObject
単一値バインディングが正常に機能する場合、MultiBindingConverter の値はどのようになりますかそれほど重要ではない質問は、TabItem のコンテンツを変更したときにバインドが呼び出される理由です (これらのコンバーターは UserControl.Unloaded の前に呼び出されていることに注意してください)。
ありがとう、デイブ