XAML : 바인딩 텍스트 상자 최대 길이를 클래스 상수에 연결합니다
문제
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으로 쉽게 액세스 할 수 있습니다. 이 경우 유형에만 바인딩 할 수 없으며 기존 객체에만 바인딩 할 수 없습니다. 그러나 하나와 둘은 객체가 아니라 유형입니다.