2016-12-27 2 views
0

속성에 연결된 텍스트 상자를 생성하는 코드를 작성하고 있습니다. PropertyInfo로 저장된 리플렉션을 사용하여 찾은 속성에 소스를 설정할 수있는 방법이 있습니까? 속성을 겪고위한WPF에서 리플렉션을 사용하여 속성에 바인딩 할 수 있습니까?

코드 :

foreach(PropertyInfo prop in GetType().GetProperties()) 
{ 
    UI.Text ctrl = new UI.Text(prop.Name, prop.GetValue(this).ToString(), prop); 
    sp.Children.Add(ctrl); 
} 

(참고 : UI.Text는 텍스트 상자를 포함하는 사용자 지정 컨트롤이며, SP는 StackPanel에있다)

바인딩 코드 :

Binding bind = new Binding() { Source = prop }; 
if (prop.CanWrite) 
{ 
    TextBox.SetBinding(TextBox.TextProperty, bind); 
} 
else 
{ 
    TextBox.IsEnabled = false; 
} 

현재 "양방향 바인딩은 경로 또는 XPath가 필요합니다"라는 오류가 발생합니다. 이는 일반적으로 읽기 전용 속성에 바인딩하려고 할 때 발생합니다. 코드가 보호되므로 PropertyInfo에 대한 바인딩 만이 속성 자체에 바인딩되지 않는다는 것은 명백합니다.

+0

속성 구현을 표시 할 수 있습니까? –

+0

Binding의 Path를 속성의 이름으로 설정하고, Source를 속성을 소유 한 객체로 설정합니다. – Clemens

답변

1

prop.Name에 바인딩의 경로 재산과 에 소스 속성을 설정이 또는 당신이 바인딩 할 그 어떤 목적 :

Binding bind = new Binding() { Path = new PropertyPath(prop.Name), Source = this }; 
if (prop.CanWrite) 
{ 
    TextBox.SetBinding(TextBox.TextProperty, bind); 
} 
else 
{ 
    TextBox.IsEnabled = false; 
} 

바인딩의 경로 속성을 지정합니다 에 바인딩하고 Source 속성은이 속성이 정의 된 개체를 지정합니다.

관련 문제