2010-11-26 6 views
1

사용자 지정 개체 목록에서 추출 된 문자열 목록에 ComboBox 컨트롤을 바인딩하려고합니다. 여기 목록의 고유 한 속성 값의 동적 목록을 얻는 방법은 무엇입니까?

은 내가 사용하는 객체입니다 :

public class Operation 
{ 
    public DateTime ValueDate { get; set; } 
    public int Amount { get; set; } 
    public string Category { get; set; } 
} 

내가 이미 목록에 존재하는 서로 다른 범주의 목록에 입력에 새 작업의 종류를 사용하는 콤보 상자를 구속력 할 노력하고있어 운영.

예 : 운영

목록 : "홈", "엔터테인먼트": 콤보 상자의 자동 완성 목록에서

{04/12/2010, 100, "Home"} 
{05/12/2010, 100, "Home"} 
{05/12/2010, 200, "Entertainment"} 

사용할 수 있습니다.

현재 목록에있는 사용 가능한 범주의 정적 목록을 가져올 수 있지만 새 목록을 기존 목록에 추가 할 때 업데이트 된 목록을 가져올 수 없습니다.

+0

당신이 문제를 해결 했습니까? –

+0

그래, 내가 제안한대로 바인드를 해제하고 다시 바인딩을 마쳤다. –

+0

'BindingSource'로 작업하면 다른 재미있는 기능이 생길 수도 있습니다. 관심이 있다면이 수업을 나중에 참조 할 수 있도록이 객체를 사용할 수 있도록주의 깊게 살펴 보는 것이 좋습니다. 어쨌든 내가 도울 수있어서 다행! =) –

답변

1

새로 고침을 위해 목록의 바인딩을 해제하고 다시 바인딩해야합니다.

+0

그게 바로 제가 피하고 싶습니다만, 이것을 처리 할 수있는 다른 방법이 없습니까? –

+0

그러면'BindingSource'를 사용하여'DataSource' 속성을 설정 한 다음이 BindingSource를 ComboBox.DataSource로 할당해야합니다. 작업이 끝나면 CurrencyManager로 직접 작업하십시오. 새로 고침을 위해, 위에서 언급 한 객체들 중 하나의'Refresh' 메소드로 작업해야합니다. –

0

이 작업을 수행 할 수 있습니다

_combo.ItemsSource = _operationsCollection; 
_combo.DisplayMemberPath = "Category"; 
_combo.Items.Filter = Filter; 

private bool Filter(object operationObj) 
{ 
    var operation = (Operation)operationObj; 
    var first = _operationsCollection.First(p => p.Category == operation.Category); 
    return ReferenceEquals(operation, first); 
}