3

私は次のようなMultiBindingを持っています:

<MultiBinding Converter="{StaticResource MyConverter}">
    <Binding Path="Object1.Object2.MyObject" />
    <Binding Path="Object1.Object2.MyCollection[1]" />
    <Binding Path="MyBoolean" />
</MultiBinding>

MyObjectが変更されたときにのみ、このMultiBindingを評価します(したがって、MyConverter.Convert()を呼び出します)。MultiBindingのUpdateSourceTriggerをExplicitに設定できることは承知していますが、Object1とObject2が定期的に再割り当てされることを考えると、コードビハインドで多くのPropertyChangedイベントを接続する必要があります。XAMLでこれを実現することは可能ですか?

どんな助けでも大歓迎です-ありがとう!

4

1 に答える 1

0

DataContextホスティングコントロールのをのに設定してみてくださいObject2。次に、直接バインドできますMyObject。これは役に立ちますか?もちろん、これはまだ変更を意味しMyCollection、再評価MyBooleanもトリガーします。MultiBinding

また、使用しているコンテキストを提供した場合にも役立ちますMultiBinding(つまり、この戻りテキストはTextBlock

編集:

あなたのコメントに応えて、おそらく別の方法があります。3つのマルチバウンドプロパティに個別のPropertyChangedイベントがあると仮定します。MyCollectionアプリケーションで許可されている場合は、これらのイベントをMyBooleanプロパティからプロパティに移動できMyObjectます。例えば:

public object MyObject
{
    get { ... }
    set
    {
        ...
        OnPropertyChanged("MyObject");
        OnPropertyChanged("MyCollection");
        OnPropertyChanged("MyBoolean");
    }
}

これはちょっとしたハックだとわかりましたが、これはのMultiBinding変更時にのみトリガーされますMyObject

編集#2:

別のオプションはEventTrigger、ホスティングコントロールにを追加することです。次に例を示します。

<EventTrigger RoutedEvent="MyObject.TargetUpdated">
   <Setter TargetName="yourCheckBox" Property="Value">
       <Setter.Binding>
           <MultiBinding Converter="{StaticResource MyConverter}">
               <Binding Path="MyObject" />
               <Binding Path="MyCollection" />
               <Binding Path="MyBoolean" />
           </MultiBinding>
       </Setter.Binding>
   </Setter>                
</EventTrigger>

ここでの唯一のキャッチはMode=TwoWay、チェックボックスのバインドを確認することです。

このリンクを参照しました。

于 2013-01-30T17:49:44.653 に答える