【问题标题】:How to set the default binding converter in Wpf?如何在 Wpf 中设置默认绑定转换器?
【发布时间】:2011-09-14 08:04:24
【问题描述】:

我正在将项目从 Silverlight 迁移到 WPF,但遇到了一个问题。

我有一个带有 GeoRect 类型的 INotifyPropertyChanged 属性 GeoRect 的控件。 GeoRect 具有在其构造函数中设置的各种公共属性,每个 IGeoPosition 类型。

我正在设置与这些属性之一的绑定,如下所示:

 <TextBlock Text="{Binding GeoRect.TopRight, ElementName=x_SomeControl}"></TextBlock>

在 Silverlight 中,每次 GeoRect 属性更改时都会在 IGeoPosition 实例上调用默认 ToString 方法。在 Wpf 中,我根本没有收到任何文本。

我可以在 Wpf 中通过向 TextBlock 添加一个 ValueConverter 来纠正这个问题,它只是调用对象上的 ToString 方法,但这似乎是不必要的。有人可以帮忙吗?

【问题讨论】:

    标签: wpf binding


    【解决方案1】:

    我怀疑您的绑定还有其他问题。同样在 WPF 中,数据绑定调用 ToString() 方法来构建文本控件的文本。
    您是否检查了 Visual Studio 的输出窗口是否存在绑定错误?或者 GeoRect 类不支持 TopRight 属性的 INotifyPropertyChanged?

    【讨论】:

    • 感谢您的回复。我认为 WPF 应该表现得像那样。 TopRight 属性的支持字段只在构造函数中设置。如果我将属性更改为返回一个字符串(并在支持字段对象上返回 ToString 方法),那么将获得正确的结果。这似乎与处理界面的方式有关。神秘!
    【解决方案2】:

    我猜ElementName=x_SomeControl 和GeoRect.TopRight 可能导致“源和路径”组合错误。您确定您的x_SomeControl 有一个名为“GeoRect”的属性吗? x_SomeControl.GeoRect 也不为空吗? x_SomeControl.GeoRect.TopRight 的值正确吗?

    正如 HCL 所指出的,当您查看输出窗口时,这将变得很明显,其中必须出现此绑定的 BindingExpression 错误。

    请检查。

    【讨论】:

    • 感谢您的回复。输出窗口是我的第一个电话,但没有运气。我确信 GeoRect 不为空,因为如果我将值转换器添加到绑定中,我可以“窥探”并看到它不是。确实在 ValueConverter 中调用 ToString 会起作用。
    猜你喜欢
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多