2013-02-10 2 views
0

리플렉션을 사용하여 객체에서 속성을 바인딩하려고합니다. 객체는 getter/setter에 public primitive type 속성과 일부 코드가있는 단순 클래스입니다. 그러나 텍스트 상자의 값을 변경하면 개체의 인스턴스에 대한 변경 사항이 반영되지 않고 값이 업데이트되지 않습니다. 무엇이 누락 되었습니까?리플렉션을 사용하여 컨트롤에 바인딩 속성

public object myObj; 

public void setObject(ref object myObject) 
{ 
    myObj = myObject; 
} 

var textbox = new Textbox(); 
... 
textbox.DataBindings.Add("Text", myObj, myObj.GetType().GetProperties()[0].Name); 
this.Controls.Add(textbox); 
+0

실제 객체를 전달하고, 그런 식으로 재산에 바인딩하려고합니다. 그렇다면, 그 방법으로 되돌아 가면, 'Type myType = myobj.GetType()','myproperties = myType.GetProperties()'등 단계가 실패하는지 확인하기 위해 모든 것을 보급하십시오. –

+0

@ImmortalBlue 나는 둘 다 이미 피곤하지만 작동하지 않는다. 왜냐하면 나는 문자열 - 이름 뒤에 만 있기 때문에별로 중요하지 않다. 참조에 의한 전달은이 코드 외부의 개체에 대한 변경 사항을 반영하기 때문에 더 논리적 인 것 같습니다. – formatc

+0

내가하려고했던 점은 두 가지입니다. 첫째, 원래 형식을 전달하고 작동하지 않는다면 반사가 문제가 아니라는 것을 보여 줬을 것입니다. 두 번째로, 호출을 퍼뜨림으로써, 디버그 목적을 위해, 당신은 그 방법으로 들어가서 당신이 원하는 것을하지 않는 단계를 볼 수 있습니다. –

답변

0

이 부분을 확인하십시오. post하시기 바랍니다.

는 당신이 필요합니다 :

Binding myBinding = new Binding("MyDataProperty"); //name of the property on the object which is used as binding source 
    myBinding.Source = myObject; 
    textbox.SetBinding(TextBlock.TextProperty, myBinding); 
+0

나는 INotifyPropertyChanged를 구현했다. 비록이 중요한 AFAIK INotifyPropertyChanged가 2 웨이 바인딩을위한 것이라고 생각하지 않지만, VS를 재시작했다. 따라서 INotifyPropertyChanged가 도움이되었거나 뭔가 이상해졌습니다. – formatc

+0

아아, 고대의 '재시작 대 마술'이 작동했습니다 :) 아니요, 소스 모드로의 데이터 바인딩에는 inpc가 필요하지 않습니다. 즉, 바운드 텍스트 상자에 입력하는 경우 기본 객체는 inpc와 관계없이 업데이트됩니다. 그러나 속성이 코드에서 변경되고 obj가 inpc를 구현하지 않으면 변경 내용이 UI에 표시되지 않습니다. –

관련 문제