2009-08-04 2 views
4

상황에 맞는 정보 (표시해야하는 사람)를 알기 위해서는 뷰의 모든 자식이 필요합니다. 또한 MVVM과 호환 될 수있는 접근 방식이 필요합니다. 내 프리즘 응용 프로그램에서 RegionContext를 사용하여이 작업을 시도했습니다.컨텍스트 데이터를 컨트롤의 모든 자식과 공유합니다.

나는 내가 RegionContext를 채울 수 있도록 전망 채울보기 주입을 사용하십시오 TabControl에 있습니다 :

Shell.xaml에서

:

<TabControl DockPanel.Dock="Right" cal:RegionManager.RegionName="TabRegion"> 

그리고 여기 내 주입의 여기 내 접근 방법과 문제입니다

//Create an instance of ContactView.xaml 
contactView = CreateContactView(contact); 
_regionManager.Regions["TabRegion"].Add(contactView, contactKey, true); 

//"contact" being a simple entity of type Contact 
RegionManager.SetRegionContext(contactViewb, contact); 

내가 기대했던은 R의 값을 얻기 위해 연결된 속성을 사용할 수 있도록했다 상기 RegionManager.RegionContext 연결된 속성을 통해이 DependencyObject에 (ContactView.xaml)의 자식 인 모든 컨트롤에서 egionContext :

<TextBlock Text="{Binding 
    RelativeSource={RelativeSource Self}, 
    Path=(cal:RegionManager.RegionContext)}"/> 

ContactView.xaml

에서

하지만이 작동하지 않습니다 ... 나는이 ContactView.xaml을 찾기 위해이 일을 얻을 :이 괜찮

<TextBlock Text="{Binding 
    RelativeSource={RelativeSource 
      Mode=FindAncestor, 
      AncestorType={x:Type views:ContactView}}, 
    Path=(cal:RegionManager.RegionContext)}"/> 

그러나 나는 모듈 ContactView에 뷰를로드 할 수거야 그리고 나는 그들이 ContactView에 대해 아무것도 알 필요하지 않았다 선호 할 것입니다.

내 질문에 정말 같아요, 얼마나 많은 컨트롤과 영역 복잡한보기를로드 할 및 모든 컨텍스트 데이터를 공유 할 것으로 예상되는?

어떻게해야할까요? Scoped 컨테이너? RegionContext (우)를 찾기 위해 컨트롤 계층 구조를 실행하는 새로운 연결된 속성을 작성 하시겠습니까? RegionContext를 올바르게 사용하지 않습니까? 나는 무엇이든 열어. 제안하십시오.

답변

3

더 나은 디자인은 모두 RegionContext를 사용하는 것을 피합니다. 그것은 단지 하나의 객체를 호스트 할 수 있다는 점에서 가난한 사람의 의존성 주입 일종입니다. 연락처를 삽입하는 범위가 지정된 Unity 컨테이너를 사용하면 ViewModel의 테스트 가능성이 향상되고 RegionContext에서 두 항목이 필요할 때 필연적 인 충돌을 피할 수 있습니다.

+0

네 ... 요점을 봅니다. 컨테이너가 데이터에 대한 투기장이 될 것이라고 우려하지만 "주변 데이터"가 살아 가기에 가장 좋은 장소 일 것입니다. –

+0

또한 ... 도대체 RegionContext가 좋은 이유는 무엇입니까? 이름의 "컨텍스트"부분이 오도 된 것 같습니다. –

+0

프리즘에 '스코프 화 된 유니티 컨테이너'의 예에 대한 링크를 줄 수 있습니까? 나는 구글에서 그것을 발견 할 수 없다. –

관련 문제