首页 文章

Xamarin XAML x:嵌套类中对属性的静态引用

提问于
浏览
0

我正在使用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 回答

  • 3

    您的静态属性在绑定中的名称应该是

    Strings+LabelUsername.Username
    

    您不仅有拼写错误,而且还尝试使用点符号来引用嵌套类,这将无效 .

    绑定使用标准的.net反射符号来按名称引用属性和类(它们要么使用字符串上的解析器,要么直接使用反射,不能检查代码库) . 嵌套类名使用 + 来分隔包含的类名和内部类名 . 你可以在这里阅读更多相关信息:

    C# : having a "+" in the class name?

相关问题