我们有一个不使用传统资源文件的动态语系统;通过语言管理器库从数据库中获取资源。基于遗留(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)
能够直接使用它会很棒。
答案 0 :(得分:4)
您可以使用value converter然后将参数传递给该资源以查找资源。绑定所属的属性并不一定重要,因为您的值转换器可以忽略该部分并只使用传递的ConverterParameter
来执行资源查找。
然后,您可以在App资源中创建资源转换器的实例,并在整个应用程序中使用它。
... SomeProperty="{Binding Converter={StaticResource MyAppResourceConverter},
ConverterParameter=SomePropertyResourceName}}" ...