문제

WPF TextBox의 MaxLength 속성을 클래스 내에서 알려진 상수로 바인딩하려고합니다. C#을 사용하고 있습니다.

클래스는 다음과 너무 다른 구조를 가지고 있습니다.

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}" />

모든 도움이 감사합니다.

많은 감사합니다

도움이 되었습니까?

해결책 2

결정된!

처음에 나는 이것을 시도했다 :

{Binding Path=MetaData+Sizes.Length1}

그러나 클래스 '2'가 데이터 콘텍스트 임에도 불구하고 런타임에 결합 된 바인딩이 실패했지만 경로는 내부 정적 클래스로 해결할 수 없었습니다 ({바인딩 경로 = {x : static metadata+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}"

괜찮은 것으로 보입니다. 상수가 특성으로 변환되어야하는지 여부는 확실하지 않지만 그렇게하는 데 아무런 해가없는 것으로 보입니다.

당신의 도움에 감사드립니다!

다른 팁

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

기간 참조 속성. 또한 표지판은 내부 클래스를 나타냅니다.

x : static과 바인딩하려고 노력하십시오. XMLNS : 크기의 네임 스페이스가있는 로컬 네임 스페이스를 XAML 헤더에 추가 한 다음 다음과 같이 바인딩하십시오.

{x:Static local:Sizes.Length1}

불행히도 다음과 같이 오류가 발생합니다 Type 'One.Two.MetaData.Sizes' not found. 나는 "blah"보다 깊은 로컬 네임 스페이스를 만들 수 없습니다 (어쨌든 vs2008에 따르면)

xmlns:local="clr-namespace:Blah"

그리고

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

하나가 정적 클래스가 아닌 경우 x : static으로 바인딩 할 수 없습니다. 내부 클래스를 사용하는 이유는 무엇입니까? 메타 데이터가 2 개를 벗어나고 크기가 속성이면 x : static으로 쉽게 액세스 할 수 있습니다. 이 경우 유형에만 바인딩 할 수 없으며 기존 객체에만 바인딩 할 수 없습니다. 그러나 하나와 둘은 객체가 아니라 유형입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top