2009-12-16 10 views
2

현재 진행중인 응용 프로그램에서 현재로드 된 프로젝트 목록을 유지해야하며 ListBox에 각 목록의 이름을 표시해야합니다 (여러 개의 ListBoxes가 있더라도 괜찮습니다). 여기 또는 거기).BindingList를 ListBox에 바인딩 할 때 문제가 발생했습니다.

class Project 
{ 
    public String Name; 

    // Etc. etc... 
} 

나는로드 된 프로젝트를 모두 포함하는는 바인딩 개체를 가지고, 내 목록 상자 (들)에 결합하고있다. 나는이 작업을 수행 할 때

private BindingList<Project> project_list = new BindingList<Project>(); 
private ListBox project_listbox; 

private void setList() 
{ 
    project_listbox.DisplayMember = "Name"; 
    project_listbox.ValueMember = "Name"; 
    project_listbox.DataSource = project_list; 
} 

그러나, project_listbox에 표시됩니다 모든이 프로젝트에 대한 클래스 이름의 집합입니다. 내가 여기서 뭔가를 놓치고 있니? ListBox에 바인딩 목록과 관련하여 찾을 수있는 모든 참조는 매우 유사한 설정을 사용합니다.

+0

목록 상자가 ToString을 (호출을)를 구현하고 추가해야합니다 점에 유의하여 클래스를 표시 값으로 사용합니다. Override ToString()을 쉽게 구현하고 문자열 결과로 Name을 반환 할 수 있습니다. –

+0

이것은 ValueMember가되는 속성을 원한다면 좋지 않은 해결책입니다. :) 당신은 여전히 ​​그 중 하나를 {get; 개인 집합}. 그렇지 않으면 ValueMember가 작동하지 않습니다. – CasperT

답변

2

당신은 속성을 읽을 수 있도록 :

class Project 
{ 
    public string Name {get; private set;} 

    // Etc. etc... 
} 

가 지금은 작업을해야합니다. 방금 테스트 했어.

이 잘 작동한다 : 나는 지적 된 것처럼

public readonly string Name; 

. "읽기 전용"을 쓰는 것은 효과가 없습니다. 방금 테스트하고 직접 확인했습니다. 여담으로

+1

+1 속성은 있지만 읽기 전용 필드는 잊어 버려야합니다. DisplayMember는 속성의 이름이어야합니다. –

+0

감사합니다. 당신 말이 맞아요. 나는 가서 시험해 보았다. – CasperT

+0

감사합니다. 이것은 내가 이전에했던 것과 기능적으로 다른 이유가 명확하지 않더라도 작동합니다. ValueMember 속성은'set'이 private 일 때만 작동합니까? – themarshal

관련 문제