Ste*_*ane 7 c# data-binding silverlight
我们有一个动态的语言系统,不使用传统的资源文件; 通过语言管理器库从数据库中获取资源.基于遗留(VB6)解决方案,它根据控件标记属性中的资源名称进行语言控制.在页面初始化之后,我们启动了一个方法,该方法接受LayoutRoot并递归它的子项应用从控件有一个标记的字符串中查找的字符串.这被证明是笨拙的,递归例程变成了一个怪物,以迎合不同控件的微妙之处,我想改为使用数据绑定来代替应用字符串.
我意识到我可以为每个控件声明要绑定的属性,但这将涉及大量代码,我希望有更好的方法.有没有办法绑定到方法,传递参数.我设想了这样的方法.
public string GetResource(string resourceName)
{
string resource = <fetch resource from language manager>;
if (String.IsNullOrEmpty(resource))
{
return resourceName;
}
else
{
return resource;
}
}
Run Code Online (Sandbox Code Playgroud)
我们的应用程序中已经有一个静态方法用于此检索,该方法具有以下签名.
public static Resource(string resourceName, string defaultValue)
Run Code Online (Sandbox Code Playgroud)
能够直接使用它会很棒.
您可以使用值转换器,然后将参数传递给该值转换器以查找资源。绑定到哪个属性并不一定重要,因为您的值转换器可以忽略该部分并仅使用传递的属性ConverterParameter
来执行资源查找。
然后,您可以在应用程序资源中创建资源转换器的实例,并在整个应用程序中使用它。
... SomeProperty="{Binding Converter={StaticResource MyAppResourceConverter},
ConverterParameter=SomePropertyResourceName}}" ...
Run Code Online (Sandbox Code Playgroud)