我正在使用Xamarin编写移动应用程序,我有一个名为Strings的静态类,它包装了我的RESX资源。我想在我的XAML文件中使用x:Static绑定到这些。如果我有一个静态属性要绑定到。
,这是有效的我删除了一些评论和其他非必要的内容,但它基本上是这样的:
namespace MyCompany.Resources
{
public static partial class Strings
{
public static string LabelUsername { get { return Resources.LabelUsername; } }
}
}
然后在我的XAML中,我这样绑定它:
<Entry Placeholder="{x:Static resources:Strings.LabelUsername}"
其中资源定义为
xmlns:resources="clr-namespace:MyCompany.Resources;assembly=MyCompany"
一切正常。当我向字符串添加嵌套类时,它会崩溃。该课程如下:
namespace MyCompany.Resources
{
public static partial class Strings
{
public static partial class Label
{
public static string Username { get { return Resources.Label_Username; } }
}
}
}
如果我这样做,那么我会在我的XAML中绑定它:
<Entry Placeholder="{x:Static resources:Strings.Label.Username}"
请注意以下资源:&#34;我们现在有三个级别(Strings.Label.Username)。这似乎是失败的。当我这样做时,我得到编译错误: 在xmlns clr-namespace中找不到类型Strings.Label:MyCompany.Resources; assembly = MyCompany
此外,我可以从我的ViewModel访问嵌套类及其属性。有没有办法让这个工作从XAML?我知道我可以绑定到VM中的变量,然后将其引用为Strings.Label.Username,但我不想为每个资源绑定执行此操作。
答案 0 :(得分:3)
绑定中的静态属性名称应为
Strings+LabelUsername.Username
您不仅有拼写错误,而且还尝试使用点符号来引用嵌套类,这将无效。
绑定使用标准的.net反射符号来按名称引用属性和类(它们要么在字符串上使用解析器,要么直接使用反射,不能用来检查代码库)。嵌套类名使用+
来分隔包含的类名和内部类名。你可以在这里阅读更多相关内容: