在Silverlight中,是否可以将数据绑定到一个方法?

7
我们有一个动态语言系统,不使用传统的资源文件;而是通过语言管理库从数据库中获取资源。基于遗留的(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)

能够直接使用这个功能将非常棒。

2
你刚才把“language”当动词用了吗?发抖 - Jeff Yates
我做了这件事,我认为它是对语言的误用。您会推荐什么动词?“翻译”似乎不适合我所描述的情况。 - Steve Crane
初始化 翻译 将资源应用于 - Jeff Yates
1个回答

4
你可以使用值转换器,然后传递参数以查找资源。无论绑定到哪个属性,都不会影响你的值转换器,因为它可以忽略该部分并只使用传递的ConverterParameter来执行你的资源查找。

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

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

@Steve:没问题。我之前也遇到过类似的情况(虽然不是资源),然后偶然发现了这个巧妙的方法。 :) - Jeff Yates

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接