2012-08-25 8 views
0

화면에 텍스트를 표시해야하는 그래픽 컨트롤 클래스 Info을 만들고 있습니다. 텍스트는 일부 오브젝트의 문자열입니다. Info 클래스의 인스턴스 내에서 해당 객체의 최신 값을 가져올 수 있기를 바랍니다.개체의 속성을 다른 개체의 속성에 바인딩하는 방법은 무엇입니까? (C#)

class Info 
{ 
    public string Text; 
} 

void Program() 
{ 
    ClassA obj = new ClassA(); 
    obj.name = "Instance of ClassA"; 
    Info wind1 = new Info(); 
    wind1.Text = obj.name; // this just copies current value, but should be a reference or something 

    /* obj.name value changes several times before it's time to display it again */ 

    // Info window drawing method 
    foreach (var item in Windows) // Windows is List<Info> 
    Draw(item.Text); // this doesn't get the latest value 
} 

도면 섹션 내에서 최신 문자열 값을 얻을 수 있도록 코드를 어떻게 변경해야합니까?

+0

제목이 그렇게할만한 것은 아닙니다. 더 나은 표현을 알고 있다면 자유롭게 편집하십시오. – user1306322

답변

3

업데이트 : 모든 유형에서 사용할 수있는 무언가가 필요하면 대리인을 사용해야합니다 예를 들어이 경우

class Info 
{ 
    private Func<string> getText; 

    public Info(Func<string> getText) 
    { 
     getText = getText; 
    } 

    public string Text 
    { 
     get 
     { 
      return getText(); 
     } 
    } 
} 

void Program 
{ 
    ClassA obj = new ClassA(); 
    obj.name = "Instance of ClassA"; 
    Info wind1 = new Info(() => obj.name); 

    // Now do your stuff. 
} 

, Info는 문자열을 반환하는 익명 함수이 부여됩니다. Text 속성에 액세스하면 해당 문자열을 검색하기 위해 함수가 평가됩니다. 문자열을 가져 오는 방법과 시작하는 위치는 클라이언트 코드 (즉, Program 메소드)에 의해 결정됩니다. 이렇게하면 Info은 특정 유형에 의존하지 않습니다. 그 자체 .name의 가치를 얻을 수 있도록


당신은, 당신의 Info 인스턴스로 ClassA 개체를 전달할 수 있습니다.

아마도 이와 같은 것일 수 있습니까?

class Info 
{ 
    public Info(ClassA obj) 
    { 
     TheObject = obj; 
    } 

    public ClassA TheObject 
    { 
     get; 
     set; 
    } 

    public string Text 
    { 
     get 
     { 
      return TheObject.name; 
     } 
    } 
} 

void Program 
{ 
    ClassA obj = new ClassA(); 
    obj.name = "Instance of ClassA"; 
    Info wind1 = new Info(obj); 

    // Now do your stuff. 
} 
+0

항상 ClassA의 문자열은 아니지만. 나는 좀 더 보편적 인 것을 찾고 있습니다. – user1306322

+0

굉장! 이것은 내가 찾고 있었던 바로 그 것이다! – user1306322

관련 문제