通常,当您希望数据绑定控件“更新”时,您可以使用“PropertyChanged”事件向接口发出数据在幕后发生更改的信号。
例如,您可以使用属性“DisplayText”绑定到datacontext的文本块
<TextBlock Text="{Binding Path=DisplayText}"/>
从这里开始,如果DataContext使用PropertyName“DisplayText”引发PropertyChanged事件,则此文本块的文本应该更新(假设您没有更改绑定模式)。
但是,我有一个更复杂的绑定,它使用datacontext的许多属性来确定控件的最终外观。为此,我直接绑定到datacontext并使用转换器。在这种情况下,我正在使用图像源。
<Image Source="{Binding Converter={StaticResource ImageConverter}}"/>
如您所见,我使用没有路径的{Binding}直接绑定到datacontext,我使用ImageConverter选择我正在寻找的图像。但现在我无法(我知道)告诉绑定更新。我试着用“。”来提高propertychanged事件。作为属性名称,它不起作用。
这可能吗?我是否必须将转换逻辑包装到绑定可以附加到的属性中,或者有没有办法告诉绑定刷新(没有明确刷新绑定)?
非常感谢任何帮助。 谢谢! - 亚当
答案 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,它应该更新。
此致