2012-02-07 3 views
0

최근 MVVM 패턴으로 ObservableCollection에 를 구현해야합니다,하지만 난 해결할 수없는이 문제가 발생했습니다 뷰 모델에 의해 노출 컬렉션 내가 MVVM 디자인 패턴을 구현하기 위해 노력 해왔다,

  1. 로를 나는 내가 보기모델 뷰에 전달하기 위해, 내 모델 클래스에서 ObservableCollection에을 사용해야합니다,를 참조하십시오. 보기모델 구조에 영향을 주어서는 안되며이 컬렉션 유형에만 국한되어서는 안됩니다.

  2. 값 유형 항목 목록으로 양방향 바인딩을 수행하는 방법이 있습니까?

예 :

public ObservableCollection<bool> MyBooleans 
{ 
    get { return m_booleans; } 
} 
<ListView ItemsSource="{Binding MyBooleans}" ...> 
    <ItemTemplate> 
     ... 
     <CheckBox IsChecked="{Binding}" ... /> 
     ... 
    </ItemTemplate> 
</ListView> 
+0

1. 아니오. 종속성 속성,'INotifyCollectionChanged','INotifyPropertyChanged'를 참조하십시오. 2. 포장지없이. – user7116

+2

** ** [포맷 도움말] (http://stackoverflow.com/editing-help)을 읽어보십시오. –

답변

8

로보기 모델 ObservableCollections (또는 INotifyCollectionChanged를 구현하는 다른 클래스)으로 (항목 추가/삭제했습니다 즉) 변경 모음을 노출한다. 이것은 이 아니며은 모델이이 인터페이스를 구현하는 컬렉션을 노출해야 함을 의미합니다.

귀하의보기 모델은 사실 모델에 더 쉽게 바인딩 할 수있는 어댑터입니다. 예를 들어 응용 프로그램에서 트윗을 표시하면 서비스 레이어에서 트윗 목록 인 모델을 반환 할 수 있습니다. 그러면 뷰 모델이이를 관찰 가능한 컬렉션에 삽입하여 뷰를 업데이트 할 수 있습니다. 나중에 (타이머를 사용하여) 어느 시점에서 귀하의 서비스를 통해 새로운 트윗을 검색 할 수 있으며, 다시 목록으로 반환됩니다. 그런 다음보기 모델은이 트윗을 ObservableCollection에 추가하여 새 항목을보기에 표시합니다.

+0

+1, 전적으로 당신과 동의합니다! –

+1

파일을 나타내는 모델을 가지고 있고 Flags 멤버 (List )가 있습니다. 이러한 플래그는 GUI에 의해 변경되어야합니다. 이 경우 모든 변경 사항에 대해 모음을 하나씩 복사해야합니까? – user574645

관련 문제