2008-10-24 31 views
18

Tôi đang cố gắng liên kết một thuộc tính Maxlength của hộp văn bản WPF với một hằng số đã biết sâu bên trong một lớp. Tôi đang sử dụng C#.XAML: Ràng buộc textbox maxlength thành hằng số Class

Lớp có một cấu trúc không phải là quá khác nhau như sau:

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; 
       } 
      } 
     } 
    } 
} 

Có nó được lồng sâu sắc, nhưng tiếc là trong trường hợp này tôi không thể di chuyển những thứ tròn rất nhiều mà không cần viết lại rất lớn yêu cầu.

Tôi đã hy vọng tôi có thể gắn kết hộp văn bản MaxLength với giá trị Length1 hoặc Length2 nhưng tôi không thể làm cho nó hoạt động.

Tôi đã chờ đợi sự ràng buộc để được giống như sau:

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

Any help is appreciated.

Rất cám ơn

Trả lời

6

Đã sửa lỗi!

Ban đầu tôi đã cố gắng làm điều này:

{Binding Path=MetaData+Sizes.Length1} 

mà biên soạn ok, tuy nhiên các ràng buộc đã thất bại trong thời gian chạy, mặc dù Class 'Hai' là DataContext con đường không thể giải quyết vào các lớp học tĩnh bên trong (có thể tôi đã làm một cái gì đó như: {Binding Path = {x: Static MetaData + Size.Length1}}?)

tôi phải fiddle với cách bố trí của các lớp học của tôi một chút nhưng các ràng buộc hiện đang làm việc.

mới cấu trúc lớp:

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; } 
     } 
    } 
} 

Sau đó tuyên bố ràng buộc của tôi là như sau:

xmlns:local="clr-namespace:Blah" 

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

Mà dường như làm việc ok. Tôi không chắc liệu các hằng số có cần được chuyển đổi thành các thuộc tính hay không, nhưng dường như không có bất kỳ tác hại nào trong việc làm như vậy.

Cảm ơn mọi người đã trợ giúp bạn!

0

cố gắng liên kết với x: Tĩnh. thêm một xmlns: namespace địa phương với không gian tên của kích cỡ để tiêu đề XAML của bạn và sau đó liên kết với một cái gì đó như thế này:

{x:Static local:Sizes.Length1} 
0

Thật không may, với những điều sau tôi nhận được thông báo lỗi Type 'One.Two.MetaData.Sizes' not found. Tôi không thể tạo ra một không gian tên địa phương sâu hơn "Blah" (cũng theo VS2008 nào)

xmlns:local="clr-namespace:Blah" 

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

nếu ta không là một lớp tĩnh bạn không thể liên kết với nó với x: tĩnh. tại sao sử dụng các lớp bên trong? nếu siêu dữ liệu nằm ngoài hai và Kích thước là thuộc tính, bạn có thể dễ dàng truy cập nó bằng x: Tĩnh. bạn không thể liên kết với các loại trong trường hợp này, chỉ với các đối tượng hiện có. nhưng một và hai là loại, không phải là đối tượng.

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

Thuộc tính thời gian tham chiếu. Dấu hiệu cộng thêm tham chiếu đến các lớp bên trong.

+0

Đây là thông tin hữu ích! Nhưng tôi chưa có đủ uy tín để nhấp vào nó! – Ash

+0

Rất hữu ích cho tôi. Cảm ơn Stusmith – ganeshran

Các vấn đề liên quan