【问题标题】:WPF Update Binding when Bound directly to DataContext w/ Converter直接绑定到带转换器的 DataContext 时 WPF 更新绑定
【发布时间】:2011-02-09 20:48:18
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: wpf data-binding datacontext propertychanged


    【解决方案1】:

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

    public Object Self { get { return this; }}

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

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

    然后当我打电话时

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

    它就像一个魅力。

    谢谢大家。

    【讨论】:

    • 谢谢!我很想找这个,当它出现在我的建议中时,我正要问它
    • @Adam,多么优雅的 hack!赞一个!
    【解决方案2】:

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

    根据您的特定场景(与 ViewModel 类相关的转换器及其一些属性),我倾向于在 ViewModel 中实现逻辑。

    【讨论】:

      【解决方案3】:

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

      问候

      【讨论】:

      • 问题是图片源直接绑定到datacontext,而不是datacontext的一个属性。转换器接收数据上下文并返回图像源。澄清一下,如果我使用具有数据上下文属性路径的绑定,然后为该属性调用 PropertyChanged,则会发生更新(有效)。但是,我需要对象本身来确定图像(不仅仅是属性)。谢谢。
      • 在输入时想到了。我将尝试在我的对象上放置一个名为“Self”的属性,该属性只返回自身,然后调用 PropertyChanged(“Self”)。我会试一试。
      猜你喜欢
      • 2013-02-02
      • 2010-11-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-23
      • 2013-11-16
      • 2017-06-14
      相关资源
      最近更新 更多