【问题标题】:Default ValueConverter for a binding绑定的默认 ValueConverter
【发布时间】:2010-11-02 10:11:47
【问题描述】:

有没有办法让 WPF 自动将Converter 应用于特定类型的所有绑定?

我见过this question,但它涵盖了不同的情况(本地化),因此没有令人满意的答案。

我的问题:我有包含 Commands 的模型类,我想将其绑定到 WPF 命令。由于模型类是独立于工具包的,我不能在那里实现 WPF 的ICommand。相反,我有一个 CommandConverterCommandModels 包装到 WPF ICommands 中:

<Button Command="{Binding MyCommand, Converter={StaticResource CommandConverter}}" />

这很好用,除了很容易忘记Converter= 并且 WPF 没有给出任何绑定失败的指示。

我现在的问题是:是否有可能强制 WPF 始终将转换器应用于特定类型的绑定?或者,当命令绑定失败时,如何让 WPF 给我正确的错误?

【问题讨论】:

    标签: c# wpf data-binding default converter


    【解决方案1】:

    我认为如果没有子类 Button(您可能不想这样做),或者定义自己的附加属性并在其上使用 TypeConverter 属性,您将无法做到。

    如果您想通过新附加属性的 TypeConverter 属性使用默认转换器,可以查看 Rob Relyea 的信息性帖子 here 或 MSDN here

    【讨论】:

    • 从第一篇文章看来,该属性似乎不需要成为 attached 属性。无论如何,我会尝试并报告!
    • 实际上,TypeConverters 似乎只用于将 (XAML-) 字符串转换为实际的属性值。无赖。
    【解决方案2】:

    虽然我从未做过,但是否可以定义自定义标记扩展?这应该会导致将该值发送到实现标记扩展的类,然后您可以从那里返回Command 属性所期望的ICommand

    正如我所说,我从来没有自己创建过一个,但是Google Search 似乎会带来一些关于如何做到这一点的文章。

    【讨论】:

    • 有趣的想法。虽然这只会将问题从必须记住使用转换器转移到必须记住使用自定义标记扩展。
    • 是的,但希望标记扩展的语法比您在上面发布的要小 - 如果没有别的,这是一个小收获。
    【解决方案3】:

    检查调试输出窗口。通常你会在那里看到绑定错误。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2017-10-16
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      相关资源
      最近更新 更多