2010-05-06 3 views
2

저는 현재 작성중인 새 응용 프로그램에 Prism을 사용하고 있습니다. 응용 프로그램의 여러 위치에서 사용할 여러 조회 목록이 있습니다. 따라서 한 번 정의한 후 해당 기능이 필요한 모든 곳에서 사용할 수 있습니다. 내 현재 솔루션은 형식화 된 데이터 템플릿을 사용하여 컨트롤을 콘텐트 컨트롤 내부에 렌더링하는 것입니다. 나는이 콘텐츠 컨트롤과 나는이 작업 및 콤보 상자의 selectedItems를가에서 EventAggregator를 통해 이벤트를 publising되어 한 순간에 컨트롤의 나머지MVVM 패턴 및 중첩 뷰 모델 - 통신 및 조회 목록

<ContentControl Content="{Binding CountriesVM}"></ContentControl> 
<ContentControl Content="{Binding RgnsVM}"></ContentControl> 
<Rest of controls on view> 

이 내 창에 다음

<DataTemplate DataType={x:Type ListOfCountriesViewModel}> 
     <ComboBox ItemsSource={Binding Countries} SelectedItem="{Binding SelectedCountry"/>  </DataTemplate> 
    <DataTemplate DataType={x:Type ListOfRegionsViewModel}> 
     <ComboBox ItemsSource={Binding Countries} SelectedItem={Binding SelectedRegion} /> </DataTemplate> 

    public class ParentViewModel 
    { 
     SelectedCountry get; set; 
     SelectedRegion get; set; 
     ListOfCountriesViewModel CountriesVM; 
     ListOfRegionsViewModel RgnsVM; 
    } 

하위 뷰 모델은 상위 뷰 모델에서 구독됩니다.

나는이 이벤트가 매우 빨리 끝날 것이라고 상상할 수있는 가장 좋은 방법이라고 확신하지 못한다. 그리고 그것은 다루기 힘들어 질 것이다. 또한 다른 창에서 동일한 뷰 모델을 사용하는 경우 이벤트를 게시하고이 상위 뷰 모델이 구독되어 의도하지 않은 결과가 발생할 수 있습니다.

내 질문이 있습니다 : -

  1. 이이 화면을 통해 다시 사용할 수있는보기에서 조회 목록을 넣어하는 가장 좋은 방법이 있나요?
  2. 자식 뷰 모델에 바인딩 된 콤보 박스가 이벤트/중재자를 사용하지 않고 부모 뷰 모델의 관련 속성을 설정하도록하려면 어떻게해야합니까? 예를 들어이 경우 SelectedCountry?
  3. 내가하려는 일에 대한 대안 구현 제안 사항은 무엇입니까?

나는 명백한 것이 빠져 있고 너무 많은 정보가있어서 어떤 도움이 가장 감사하게 받아 들여지는지 알기가 어렵다.

답변

3

시나리오에서 부모는 자녀 유형을 알고있는 것으로 보입니다. 이 상황에서 속성을 사용할 수 없습니까? :

ListOfCountriesVM은 SelectedCountry에 대한 속성을 노출합니다.

상위 VM에서 SelectedCountry를 구현하면 ListOfCountriesVM.SelectedCountry 만 반환됩니다.

ListOfCountriesVM을 소유하고 있음을 알고있는 모든 부모보기 모델에 대해이 작업을 수행 할 수 있습니다.

내 경험에 따르면 메시징/이벤트 집계는 게시자가 누가 듣고 있는지, 또는 얼마나 많은 수신기가 있는지 신경 쓰지 않는 시나리오에서만 사용해야합니다.

  1. 이 보장 존재할 수 없다 같은 모듈의 모델을 볼 알림을 보내는 응용 프로그램
  2. 에 다른 모듈에 알림을 보내는 예를 들면 다음과 같습니다.

사용자 (부모)는 게시자 (하위)가 누구인지 이미 알고 있으므로 속성을 사용하는 간단한 솔루션이 가장 적절하다고 판단됩니다. 나는이 특별한 시나리오가 메시징이나 이벤트 기반 솔루션을 보증하지 않는다고 생각합니다.