我正在使用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}"
注意在"resources:"之后我们现在有三个级别(Strings.Label.Username) . 这似乎是失败的 . 当我这样做时,我收到编译错误: Type Strings.Label not found in xmlns clr-namespace:MyCompany.Resources;assembly=MyCompany
此外,我可以从我的ViewModel访问嵌套类及其属性 . 有没有办法让这个工作从XAML?我知道我可以绑定到VM中的变量然后具有该引用Strings.Label.Username,但我不想为每个资源绑定执行此操作 .
1 回答
您的静态属性在绑定中的名称应该是
您不仅有拼写错误,而且还尝试使用点符号来引用嵌套类,这将无效 .
绑定使用标准的.net反射符号来按名称引用属性和类(它们要么使用字符串上的解析器,要么直接使用反射,不能检查代码库) . 嵌套类名使用
+
来分隔包含的类名和内部类名 . 你可以在这里阅读更多相关信息:C# : having a "+" in the class name?