2010-08-23 2 views
3

알 수없는 출처에 대한 바인딩이 있습니다. 내가 가진 건 바인딩 뿐이야. 나는 바운드 객체를 볼 수있는 다른 방법이 없다. 값이 null 인 경우에도 바인딩 된 개체의 Type을 파악해야합니다 (내 문제가있는 곳입니다).C#/WPF에서 바운드 개체의 Type()을 가져올 수 있습니까 (바인딩 된 값이 null 인 경우에도 가능)?

개체에 바인딩 한 다음 개체를 사용하여 형식을 얻는 방법으로 바인딩을 평가했지만 값이 null 인 경우에도 형식을 알아야합니다.

는 예를 들어, 내가 수업과 같이이 : 그 모든 속성에 WPF 컨트롤 바인딩이있는 경우, 이제

public class Customer{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

나는 종류를 좀하고 싶습니다 (의 그들이 종속성 속성입니다 가정하자) 값이 null 인 경우에도 속성의

그래서 예를 들어 {Binding Name}을 나타내는 Binding 개체가있는 사용자 지정 컨트롤이 있습니다. 어떻게 C#을 사용하여 "바운드 객체"의 유형을 얻을 수 있습니까?

답변

3

비공개 회원에게 액세스하려면 리플렉션을 사용할 의향이 있습니까? 그렇다면 Binding에는 내부 형식이 PropertyPathListener_listener이라는 개인 멤버가있는 BindingExpression을 반환하는 CreateBindingExpression이라는 내부 메서드가 있다고 생각합니다. 그게 내 생각 엔 LeafType이라 불리는 내부 재산이 있습니다.

지저분하고, 신뢰가 필요하며, 프레임 워크의 차후 버전에서 실패 할 수도 있지만, 원하는 것을 얻는 유일한 방법 일 수 있습니다.

+0

와우 ... 예 그것이 바로 그 것이다. 나는 그렇게하지 않을 것이다. "Property"문자열과 "Source"개체를 대신 설정하여 속성에 바인딩하는 것만을 허용하는 것처럼 보입니다. 그래도 고마워!:) – Phobis

+0

+1,'BindingExpression'을 얻기 위해 농구를 뛰어 넘을 필요는 없지만 그냥'BindingOperations.GetBindingExpression'을 사용하십시오. 그러나 거기에서 불행히도 소스 속성의 유형을 결정하기 위해 반사에 의존해야합니다. –

0

그것은 단지 값이 null의 경우, 입수 할 어떤 유형이 없습니다

MyCustomControl.DataContext != null ? MyCustomControl.GetType() : default(Type); 
+0

DataContext가 없습니다. 내 평가 코드의 범위에서, 나는 단지 바인딩이 있습니다. 값이 null 인 경우에도 바인딩이 가리키는 객체 유형을 가져와야합니다. – Phobis

0

을하는 문제가 될 것이다. 바인딩이 App.xaml에 정의 된 정적 리소스에 대한 것이면 형식을 찾기 위해 xaml 파일 자체를 구문 분석해야합니다. 클래스에서 정의 된 경우 xaml 파일을 조사하여 형식을 찾아야합니다.

코드에서 바인딩을 수행하는 경우이를 반영 할 수없는 null 로컬 변수에 바인딩 될 수 있으므로이 작업을 수행 할 수 있다고 생각하지 않습니다. 나는 내 머리 위로 길을 갈 것이다.) 바인딩이 xaml에 정의되어 있으면 합리적으로 xaml을 파싱하고 xaml 경로를 따라 다른 xaml 파일을 구문 분석하고 해당 코드로 바인딩하는 바인딩의 속성을 반영 할 수 있습니다.

이것은 엄청난 고통이 될 것이고, 당신이 여기에 귀결되는 것이 무엇이든 그것이 null 일지라도 유형을 식별하려고 시도하는 것 이외의 다른 일을함으로써 취할 수있는 어리석은 시간없이 성취 될 수 있음을 확신합니다.

+0

객체의 속성에 바인딩됩니다. 방금 바인딩 된 속성 (또는 비슷한)의 PropertyInfo에 액세스하는 방법을 찾으려고합니다. – Phobis

+0

@ Poobis : 당신이 비 대상의 속성에 구속력을 가졌다 고 나는 생각하지 않았다. 그것은 그 대상을 어떻게 추적 할 것인가의 문제 일 뿐이다. xaml에서 그것을 추적하여 그 속성에 대한 유형을 반영 할 수는 있지만 바인딩이 코드에 정의되어 있다면 경계선 디 컴파일과 같은 리플렉션 이외의 다른 방법을 사용하지 못할 수도 있습니다 .. –

관련 문제