直接绑定到DataContext w / Converter时的WPF更新绑定

时间:2010-04-19 20:27:50

标签: wpf data-binding datacontext propertychanged

通常,当您希望数据绑定控件“更新”时,您可以使用“PropertyChanged”事件向接口发出数据在幕后发生更改的信号。

例如,您可以使用属性“DisplayText”绑定到datacontext的文本块

<TextBlock Text="{Binding Path=DisplayText}"/>

从这里开始,如果DataContext使用PropertyName“DisplayText”引发PropertyChanged事件,则此文本块的文本应该更新(假设您没有更改绑定模式)。

但是,我有一个更复杂的绑定,它使用datacontext的许多属性来确定控件的最终外观。为此,我直接绑定到datacontext并使用转换器。在这种情况下,我正在使用图像源。

<Image Source="{Binding Converter={StaticResource ImageConverter}}"/>

如您所见,我使用没有路径的{Binding}直接绑定到datacontext,我使用ImageConverter选择我正在寻找的图像。但现在我无法(我知道)告诉绑定更新。我试着用“。”来提高propertychanged事件。作为属性名称,它不起作用。

这可能吗?我是否必须将转换逻辑包装到绑定可以附加到的属性中,或者有没有办法告诉绑定刷新(没有明确刷新绑定)?

非常感谢任何帮助。 谢谢! - 亚当

3 个答案:

答案 0 :(得分:19)

这里的解决方法是向我的对象添加一个属性(用作datacontext),称为“Self”,它只返回

public Object Self { get { return this; }}

然后在绑定中我使用了这个属性:

<Image Source="{Binding Path=Self, Converter={StaticResource ImageConverter}}"/>

然后我打电话

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

它就像一个魅力。

谢谢大家。

答案 1 :(得分:2)

我不相信有一种方法可以完全满足当前转换器的需求。如您所述,您可以在ViewModel中进行计算,也可以将转换器更改为IMulitValueConverter

从您的特定场景(转换器绑定到ViewModel类及其一些属性),我倾向于在ViewModel中实现逻辑。

答案 2 :(得分:0)

嗯,你没有展示完整的实现。但是我认为如果绑定到GUI的值提供了PropertyChanged-Event,它应该更新。

此致