2014-12-27 4 views
1

저는 MVVM 및 Caliburn.Micro를 처음 사용합니다. 콤보 상자가있는 Caliburn.Micro를 사용하여 간단한 응용 프로그램을 만들려고합니다. 콤보 상자 항목은 프로그램이 실행 중일 때 동적으로 추가됩니다. 문제는 콤보 상자가 첫 번째 항목 탐색 후에 내용 업데이트를 중단한다는 것입니다. 보기에서caliburn micro와 함께 동적으로 콤보 박스를 채우는 방법?

다음과 같이

콤보는 선언 :

<ComboBox x:Name="cmbProductList" /> 뷰 모델에서

:

나는 콤보 항목에 대한 다음 목록 선언

List<string> L = new List<string> { }; 
,

나는 콤보 상자 항목 채우기 위해 다음과 같은 방법을 사용하고 있습니다 :

public List<string> cmbProductList 
{ 
    get 
    { 
     return L; 
    } 
    set 
    { 
     L = value; 
     NotifyOfPropertyChange("cmbProductList"); 
    } 
} 

그리고이 명령은이 목록에 항목을 추가 :

L.Add(p1.ID.ToString()); 

답변

2

당신이 당신의 콤보 상자 항목에 사용하는 컨테이너가 아닌 적절한 것. List은 변경 사항 (추가 또는 제거 된 항목)을 UI에 알릴 방법이 없습니다. 대신 ObservableCollection을 사용해야합니다.

BindableCollection는 ObservableCollection에 상속 단순한 모음입니다,하지만이 모든 이벤트뿐만 아니라 UI 스레드에서 제기되는 것을 보장 : 또는 더 나은, 당신은 ObservableCollection의 Caliburn.Micro의 사용자 정의 버전입니다 BindableCollection을 사용할 수 있습니다.

http://caliburnmicro.com/documentation/introduction

귀하의 속성은 다음과 같을 것이다

: 나머지는 변화가있을 수

_cmbProductList = new BindableCollection<string>(); 

:

private BindableCollection<string> _cmbProductList; 

public BindableCollection<string> cmbProductList 
{ 
    get 
    { 
     return _cmbProductList; 
    } 
    set 
    { 
     _cmbProductList = value; 
     NotifyOfPropertyChange("cmbProductList"); 
    } 
} 

및 초기화는 다음과 같이 것입니다 물론

.

+0

답장을 보내 주신 Mr. dchaid에게 감사드립니다. 알아 : initialization의 var 코드가 작동하지 않습니다. "BindableCollection _cmbProductList = new BindableCollection ();" 대신. – MMJZ

+0

사실, 뒷받침 필드의 이름과 혼동스러워서 대답을 편집했습니다. –