【问题标题】:Binding a converter to a MultiBinding in Silverlight在 Silverlight 中将转换器绑定到 MultiBinding
【发布时间】:2012-01-14 10:42:57
【问题描述】:

博客文章代码中的Converter 属性Silverlight MultiBinding solution for Silverlight 4 不是依赖属性,因此我无法将其与转换器绑定(出于技术原因,必须在前面将其作为Unity 注入的一部分实例化在应用程序中而不是作为用户控件的一部分的简单静态资源)。

如何修改MultiBinding 代码以接受绑定转换器?我试图使它成为一个依赖属性:

public IMultiValueConverter Converter { get { return (IMultiValueConverter)GetValue(ConverterProperty); } set { SetValue(ConverterProperty, value); } }
public static DependencyProperty ConverterProperty = DependencyProperty.Register("Converter", typeof(IMultiValueConverter), typeof(IMultiValueConverter), null);

但我得到了

DependencyProperty System.Windows.Data.IMultiValueConverter。不能在 ...Binding.MultiBinding 类型的对象上设置转换器。

如果这不是一个可行的选项,我该如何绑定ConverterParameter 属性或获得一些东西来模拟转换器与MultiBinding 的绑定?

【问题讨论】:

  • 为什么不将您的数据也绑定到 MultiBinding?那么你在多值转换器中有数据,如果你的数据发生变化,你的转换器也会触发。
  • @punker76,我不确定我是否关注你。例如,我有多个视图模型的 3 个属性,但它们必须通过转换器运行才能在视图中正确格式化。转换器本身不能(据我所知)是静态资源,因为 将依赖项注入到其构造函数中。
  • 嗯,很遗憾我还没明白你为什么要绑定转换器?
  • @punker76,因为它足够复杂,无法创建静态资源。转换器使用服务来查找信息,以便在格式化时显示“看起来正确”的最终结果。

标签: binding silverlight-4.0 dependency-properties multibinding imultivalueconverter


【解决方案1】:

我使用“模拟绑定”路线解决了这个问题,但如果有人有其他答案,那不是我的偏好。相反,我所做的不是通过依赖注入来构建转换器,而是让它使用服务位置来获取它所需的依赖。一般来说,我更喜欢依赖注入而不是服务位置。 “服务位置”是将 Unity 容器存储在应用程序的全局资源中的问题;从那里得到我需要的东西并不难。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2012-03-10
  • 1970-01-01
  • 2011-03-07
  • 2012-03-27
  • 1970-01-01
相关资源
最近更新 更多