2013-08-07 4 views
0

저는 MVVM 패턴을 처음 사용하고 프로젝트에서 Caliburn.Micro를 사용해 보려고합니다.ViewModel 컬렉션이 포함 된 ViewModel 하나, ViewModel 속성 값에 따라 다른 뷰

여러 뷰에서 공유하는 ViewModel (ViewModel 컬렉션 포함)을 하나 갖고 싶습니다. 각 뷰는 해당 속성 중 하나에 특정 값만있는 항목 만 표시합니다.

구체적으로 말해서 나는 자주 업데이트되는 다른 값을 모니터링 할 수있는 서비스를 사용하고 있습니다. 그런 다음 유형이 DataValue 인 속성을 포함하는 MonitoredItem 유형의 객체를 얻습니다.이 객체는 값의 객체 및 값의 데이터 유형에 대한 속성을 포함합니다.

지금까지 나는 모델의로이 서비스의 MonitoredItem 클래스를 사용하는 MonitoredItemViewModelBindableCollection<MonitoredItemViewModel> MonitoredItems를 포함하고 항목을 추가/제거 명령을 MonitoredItemsViewModel 있습니다.

나는 또한 내가 현재 모니터링하고있는 모든 항목을 볼 수있는 MonitoredItemsView을 가지고있다.

보기를 분할하여 모든 것을 가질 수 있습니다. MonitoredItems 여기서 DataValue은 정수/float/double이 내 창에서 한 영역에 표시되고 부울 값은 다른 곳에서 표시되는 등입니까?

답변

0

보기에서하지 말고 대신 필터링해야하는 항목에 따라 다른 컬렉션을 ViewModels에 표시하십시오.

이것은 알려진 컬렉션으로, 예를 들어

public ObservableCollection<MonitoredItemViewModel> ItemsWhereFooIsBar ... 
public ObservableCollection<MonitoredItemViewModel> ItemsWhereFooIsntBar ... 

또는 요구에

public ObservableCollection<MonitoredItemViewModel> GetItems(Func<DataValue, bool> matches) 
{ 
    //Filter collection with 
    return ... allItems.Where(x=>matches(x))... ; 
} 

을 필터링 된 컬렉션을 반환하고

GetItems(x=>x.Foo == Bar) 

를 통해 당신이하려고하는 문제를 호출하는 것이 더 일반적으로 그것을 할 수있는 항목이 변경 될 때와 컬렉션에서 컬렉션으로 전환해야합니다. ReactiveUI을 사용하는 경우 Rx를 사용하여 내장 된 항목 추적을 실행하고 .CreateDerivedCollection(...)을 사용하여 자동으로 새 컬렉션을 만들 수 있습니다 (힌트, 힌트 :-))

그렇지 않은 경우 몇 가지 선택 사항.

당신은 ObservableCollection에에서 클래스를 파생 할 수
    • 그뿐만 아니라 새로운 항목을 추가 또는 제거하거나 항목의 속성뿐만 아니라 변경할 경우에도 알림을받을 때 CollectionChanged을 통해 통보하고 그래서.
    • ItemViewModel을 변경할 수 없으므로 속성을 변경하지 않아도되지만 이전 항목을 삭제하고 업데이트 된 항목을 올바른 컬렉션에 추가 할 수 있습니다.
  • +1

    [이 대답] (http://stackoverflow.com/questions/13780608#15035000)에서 ReactiveUI에 대한 몇 가지 대안을 나열했습니다. – HappyNomad

    +0

    내 문제를 해결하는이 제안 된 방법에 감사드립니다. 나는 이것을 시도 할 것이다 – Walkingsteak

    +0

    @HappyNomad 고마워, 나는 그것들을 살펴볼 것이다. 매번 바퀴를 재발 명할 필요가 없다는 것을 알고 기쁜 – AlSki