2010-07-01 2 views
0

VB 파워 팩 데이터 리피터 컨트롤을 사용하고 있습니다. 사용자 지정 개체 목록을 리피터 내부의 레이블에 바인딩해야합니다. 다음 코드는 Tip.User.UserName 바인딩을 제외하고 작동합니다.C# winforms에서 사용자 지정 개체 컬렉션으로 레이블에 데이터 바인딩하는 방법

어떻게 완전히 중첩 된 속성 구문의 WinForm 바인딩에 대한 작업을해야하기 때문에 당신이 얻고있는 어떤 오류에 따라 Tip.User.UserName

public interface ITip 
    { 
    DateTime Date { get; set; } 
    int Id { get; set; } 
    int UserId { get; set; } 
    User User { get; set; } 
    Group Group { get; set; } 
} 

public interface IUser 
{ 
    string DisplayName { get; set; } 
    string UserName { get; set; } 
} 






List<Tip> currentTips = SearchTips(toolTxtSearch.Text, Convert.ToInt32(toolCmbTipGroups.ComboBox.SelectedValue)); 


      lblTipId.DataBindings.Add(new Binding("Text", currentTips, "Id")); 
      lblTipUser.DataBindings.Add(new Binding("Text", currentTips, "User.UserName")); // this line doesnot work !!! 


      repeater.DataSource = currentTips; 
+0

어떤 종류의 오류가 발생합니까? – Simon

답변

0

같은 내부 클래스의 속성에 바인딩 할 수 있습니다. (? 아마입니다 DataRepeater 일반 바인딩 메커니즘을 사용하지 않는) 주위에 작품으로

당신 ITIP 구현에 속성을 추가하여 마무리합니다 :

public string UsersUserName 
{ 
    get { return User != null ? User.UserName : null; } 
} 

편집 :도에서 INotifyPropertyChanged를 구현하는 것을 잊지 마세요 값이있을 때 바인딩을 업데이트하려면 데이터 객체에 추가합니다. 이 경우 ITip 구현의 User 속성과 IUser 구현의 UserName에 대해 속성 변경 이벤트를 보냅니다.

+0

나는 그것이 효과가 있다고 생각한다. UserName이 null 참조 일 수 있습니까? – Simon

+0

답장을 보내 주셔서 감사합니다. 사실 User.UserName은 null이 아니며 오류가 발생하지 않지만 UserName이 바인딩 된 레이블에는 아무 것도 표시되지 않습니다. 그러나 바인딩 속성을 "사용자"로 설정하면 레이블에 User 클래스 (Models.User)의 클래스 이름이 레이블에 표시됩니다. – Amila

관련 문제