【问题标题】:Is it possible to data bind to a method in Silverlight?是否可以将数据绑定到 Silverlight 中的方法?
【发布时间】:2011-03-12 19:48:51
【问题描述】:

我们有一个不使用传统资源文件的动态语言系统;而是通过语言管理器库从数据库中获取资源。基于旧版 (VB6) 解决方案,它根据控件标签属性中的资源名称对控件进行语言。页面初始化后,我们触发一个方法,该方法采用 LayoutRoot 并递归其子项,应用从控件具有的标记中查找的字符串。这被证明是笨拙的,递归例程已经变成了一个怪物,以迎合不同控件的微妙之处,我想改为使用数据绑定来应用字符串。

我意识到我可以为每个控件声明要绑定的属性,但这将涉及大量代码,我希望有更好的方法。是否有某种方法可以绑定到方法,传递参数。我设想了一个类似这样的方法。

public string GetResource(string resourceName)
{
  string resource = <fetch resource from language manager>;

  if (String.IsNullOrEmpty(resource))
  {
    return resourceName;
  }
  else
  {
    return resource;
  }
}

我们的应用程序中已经有一个用于此检索的静态方法,它具有以下签名。

public static Resource(string resourceName, string defaultValue)

能直接使用就太好了。

【问题讨论】:

  • 您只是将“语言”用作动词吗? 颤抖
  • 我做到了,我认为这是对语言的滥用。你会推荐什么动词?翻译似乎不适合我所描述的内容。
  • “初始化”、“翻译”、“将资源应用于”

标签: c# silverlight data-binding


【解决方案1】:

您可以使用value converter,然后将参数传递给它以查找资源。绑定到什么属性并不一定重要,因为您的值转换器可以忽略该部分,只需使用传递的ConverterParameter 来执行您的资源查找。

然后,您可以在 App 资源中创建资源转换器的实例,并在整个应用程序中使用它。

... SomeProperty="{Binding Converter={StaticResource MyAppResourceConverter},
                           ConverterParameter=SomePropertyResourceName}}" ...

【讨论】:

  • @Steve:没问题。我不得不做类似的事情(虽然不是资源)并且偶然发现了这种厚颜无耻的方法。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2013-10-16
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
相关资源
最近更新 更多