如果我绑定到当前DataItem,我如何调用PropertyChanged(Path =。)

时间:2013-01-14 15:06:59

标签: c# wpf binding datacontext inotifypropertychanged

在我的XAML代码中,我绑定了当前的dataitem,如下所示:

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

我的转换器使用dataitem的几个属​​性来确定背景。当任何这些属性发生变化时,背景颜色可能会发生变化。我想向目标发送通知,以便后台适当更改。我的问题是,当绑定路径是“。”时,我不知道如何发送这样的通知。

如果我的转换器使用PropertyA和PropertyB,请调用:

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

和/或

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

不会触发绑定。我试着说这个:

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

但它也没有触发绑定。

如何以“Path =”的方式调用PropertyChanged。绑定会收到他们需要更新的通知吗?

这可能是一个重复的问题,但我找不到一个。我不太清楚术语。

1 个答案:

答案 0 :(得分:1)

尝试使用IMultiValueConverter,并将其所需的属性传递给

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

每次为PropertyAPropertyB

提出PropertyChange通知时,都应重新评估

使用您当前的绑定语法的替代方法是在PropertyChangePropertyA更改时随时提出父数据项的PropertyB通知。

例如,假设您当前的数据项为SomeObject

SomeObject.PropertyChanged += SomeObject_PropertyChanged;

...

void SomeObject_PropertyChanged(object src, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "PropertyA" || e.PropertyName == "PropertyB")
    {
        RaisePropertyChanged("SomeObject");
    }
}