2008-10-24 24 views
18

我正试图将WPF文本框的Maxlength属性绑定到类中的已知常量。我正在使用C#。XAML:将文本框maxlength绑定到类常量

类有没有太多不同以下的结构:

namespace Blah 
{ 
    public partial class One 
    { 
     public partial class Two 
     { 
      public string MyBindingValue { get; set; } 

      public static class MetaData 
      { 
       public static class Sizes 
       { 
        public const int Length1 = 10; 
        public const int Length2 = 20; 
       } 
      } 
     } 
    } 
} 

是它深深嵌套,但不幸的是在这种情况下,我不能移动的东西圆很没有需要巨大的重写。

我希望我能够将文本框MaxLength绑定到Length1或Length2值,但我无法让它工作。

我期待的结合是类似以下内容:

<Textbox Text="{Binding Path=MyBindingValue}" MaxLength="{Binding Path=Blah.One.Two.MetaData.Sizes.Length1}" /> 

任何帮助表示赞赏。

非常感谢

回答

6

固定!

起初,我试着这样做:

{Binding Path=MetaData+Sizes.Length1} 

其编译OK,但是结合在运行时,尽管失败的类“两课”是路径无法解析成内部静态类DataContext的(可能我做了这样的事情︰{绑定路径= {x:静态元数据+ Size.Length1}}?)

我不得不摆弄我的班的布局有点,但绑定现在工作。

新的阶级结构:

namespace Blah 
{ 
    public static class One 
    { 
     // This metadata class is moved outside of class 'Two', but in this instance 
     // this doesn't matter as it relates to class 'One' more specifically than class 'Two' 
     public static class MetaData 
     { 
      public static class Sizes 
      { 
       public static int Length1 { get { return 10; } } 
       public static int Length2 { get { return 20; } } 
      } 
     } 

     public partial class Two 
     { 
      public string MyBindingValue { get; set; } 
     } 
    } 
} 

然后我约束力的声明如下:

xmlns:local="clr-namespace:Blah" 

MaxLength="{x:Static local:MetaData+Sizes.Length1}" 

这似乎工作确定。我不确定这些常量是否需要转换为属性,但这样做似乎没有任何伤害。

谢谢大家的帮助!

0

试着用x:Static来绑定。同尺寸的命名空间的本地命名空间的XAML头,然后用像这样绑定:添加的xmlns

{x:Static local:Sizes.Length1} 
0

不幸的是,我得到的错误Type 'One.Two.MetaData.Sizes' not found以下。我不能创建一个本地命名空间比“嗒嗒”更深(以及根据VS2008反正)

xmlns:local="clr-namespace:Blah" 

MaxLength="{x:Static local:One.Two.MetaData.Sizes.Length1}" 
0

如果一个人是不是你不能绑定到它与X静态类:静态。为什么使用内部类?如果元数据超出两个,并且Sizes是一个属性,则可以使用x:Static轻松访问它。 在这种情况下,您不能绑定到类型,只能绑定到现有对象。但一和二是类型,而不是对象。

37
MaxLength="{x:Static local:One+Two+MetaData+Sizes.Length1}" 

期间引用属性。加号表示内部类。

+0

这是有用的信息!但是我没有足够的声望来点击它! – Ash 2008-10-24 12:44:00