0

私の XAML コードでは、次のような現在のデータ項目へのバインディングがあります。

Background="{Binding Path=., Converter={StaticResource ResourceKey=kBackground}}"

私のコンバーターは、データ項目のいくつかのプロパティを使用して背景を決定します。これらのプロパティのいずれかが変更されると、背景色が変更される可能性があります。背景が適切に変化するように、ターゲットに通知を送信したい。私の質問は、バインド パスが "." の場合にそのような通知を送信する方法がわからないということです。

私のコンバーターが PropertyA と PropertyB を使用している場合、次を呼び出します。

PropertyChanged(this, new PropertyChangedEventArgs("PropertyA"))

および/または

PropertyChanged(this, new PropertyChangedEventArgs("PropertyB"))

バインディングをトリガーしません。私はこれを呼び出してみました:

PropertyChanged(this, new PropertyChangedEventArgs("."))

しかし、バインディングもトリガーしませんでした。

「Path=.」のような方法で PropertyChanged を呼び出すにはどうすればよいですか。バインディングは更新が必要な通知を受け取りますか?

これは重複した質問かもしれませんが、見つかりませんでした。専門用語がよくわかりません。

4

1 に答える 1

2

代わりにIMultiValueConverterを使用して、必要なプロパティを渡してみてください

<Grid.Background>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding Path="PropertyA"/>
        <Binding Path="PropertyB"/>
    </MultiBinding>
</Grid.Background>

PropertyAこれは、またはいずれかの PropertyChange 通知が発生するたびに再評価される必要があります。PropertyB

現在のバインディング構文を使用する代替手段は、いつでも親データ項目または変更のPropertyChange通知を発生させることです。PropertyAPropertyB

たとえば、現在のデータ項目が次の場合SomeObject:

SomeObject.PropertyChanged += SomeObject_PropertyChanged;

...

void SomeObject_PropertyChanged(object src, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "PropertyA" || e.PropertyName == "PropertyB")
    {
        RaisePropertyChanged("SomeObject");
    }
}
于 2013-01-14T15:46:32.503 に答える