이 질문은 Creating an instance of a nested class in XAML과 중복 될 수 있습니다. 이 질문 및 관련 MSDN 설명서는 중첩 형식과 관련이 있습니다. 이 예제에서 유형 자체는 중첩되지 않지만 구문은 익숙해 보입니다. 그것이 별도의 질문과 답변을 정당화하는지 여부는 알지 못합니다.XAML에서 중첩 된 속성 참조
가 나는 ObjectDataProvider
를 사용하여 중첩 된 속성에 액세스하고 싶습니다. 유형의 정적 속성에 액세스 할 수 있지만 유형의 정적 속성을 통해 인스턴스 속성에 액세스하면 컴파일 오류가 발생합니다.
예를 들어, 다음 세 가지 클래스를 선택하십시오. A
에 BProperty
에 대한 ObjectDataProvider
만들기
public static class A
{
static A()
{
BProperty = new B();
}
public static B BProperty { get; private set; }
}
public class B
{
public B()
{
CProperty = new C();
}
public C CProperty { get; private set; }
public string GetValue(string arg)
{
return arg + " from B";
}
}
public class C
{
public string GetValue(string arg)
{
return arg + " from C";
}
}
다음 XAML을 사용하여 수행 할 수 있습니다.
<Window.Resources>
<ObjectDataProvider x:Key="provider"
ObjectInstance="{x:Static Member=local:A.BProperty}"
MethodName="GetValue">
<ObjectDataProvider.MethodParameters>
<System:String>string argument</System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<Label Content="{Binding Source={StaticResource provider}}" />
</Grid>
이 코드를 실행하면 텍스트 "B의 문자열 인수"라는 레이블이 생성됩니다.
나는 provider
의 ObjectInstance
"{x:Static Member=local:A.BProperty.CProperty}"
에 또는 "{x:Static Member=local:A.BProperty+CProperty}"
내가받을 컴파일 오류를 설정합니다.
ObjectDataProvider
에서 A
님의 인스턴스 BProperty
에 어떻게 액세스 할 수 있습니까?
클래스 및 속성 이름은 동일합니다. 테스트를 위해 클래스의 이름을 바꾸고 클래스가 계속 발생하는지 확인할 수 있습니까? – Xcalibur37
이 예제는 반환 형식과 다른 이름의 속성을 가진 원래 코드에서 단순화되었습니다. 이 경우에도 문제가 계속 발생합니다. 그러나이 예제에서는 가독성이 향상되므로 코드를 업데이트 할 예정입니다. – bozalina
B는 정적으로 인스턴스화 되었기 때문에 이것이라고합니다. 따라서 일단 인스턴스화되면 문맥 적 속성은 무시됩니다. – Xcalibur37