8

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

例如,您可以有一个文本块,该文本块通过属性“DisplayText”绑定到数据上下文

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

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

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

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

如您所见,我使用没有路径的 {Binding} 直接绑定到数据上下文,并使用 ImageConverter 来选择我要查找的图像。但现在我没有办法(据我所知)告诉绑定更新。我尝试用“。”引发 propertychanged 事件。作为属性名称,它不起作用。

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

任何帮助将不胜感激。谢谢!-亚当

4

3 回答 3

21

这里的解决方法是向我的对象(用作数据上下文)添加一个名为 "Self" 的属性,它只是返回

public Object Self { get { return this; }}

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

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

然后当我打电话

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

它就像一个魅力。

谢谢大家。

于 2010-04-19T21:03:45.370 回答
2

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

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

于 2010-04-19T20:54:55.647 回答
0

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

问候

于 2010-04-19T20:38:29.127 回答