2017-03-27 10 views
0

나는 regionManager.RequestNavigate 메소드를 사용하여 여러보기를로드하는 TabControl을가집니다. 모든보기의 유형이 동일합니다.프리즘 액세스 인스턴스보기 TabControl

regionManager.Regions["MainContentRegion"].Remove(view) 

내 문제는 내가 어떻게 할 수 모르겠입니다 : 각 TabItem의의

헤더는 나는 다음과 같은 코드로, 누를 때 뷰를 제거하기 위해 사용하고자하는 버튼이 있습니다 viewmodel에서 누른 버튼이 포함 된 뷰의 인스턴스를 가져옵니다. 이것은 항상 TabControl의 활성보기는 아니지만 단추가 각 TabItem의 머리글에 있으므로 비활성보기 일 수도 있습니다.

또한, 나는 어떤 도움이 매우 감사합니다 ...

을 RequestNavigate 방법에 뷰의 이름을 설정하는 방법을 찾을 수 없습니다!

+0

편집 : 나는 단순히 다음 코드를 사용하여,이 지역에서보기를 제거 할 수있는 ViewModel에서 가 명확하지 않았다 경우는 ... 버튼은 뷰 모델의 명령에 바인더 제본하고, 내가 원하는 뷰의 ViewModel로부터 View의 인스턴스에 액세스합니다. – Alessandro

+0

해당 탭 컨트롤의 모델 우선 탐색을 보려면 전환 할 수 있습니까? 그런 다음 '이'즉 지역에서보기 모델 인스턴스를 삭제할 수 있습니다. – Haukinger

+0

나는 이것에 pluralsight 과정을 썼다. 전체 코스에 대한 링크가있는 클립을 여기에서 볼 수 있습니다. http://brianlagunas.com/new-pluralsight-course-prism-problems-solutions-mastering-the-tabcontrol/ –

답변

0

문제점에 대한 해결책을 찾았습니다. 내가 한 것은 뷰 자체를 Button Command의 매개 변수로 전달하는 것입니다. MainWindow.xaml에있는 스타일 안에 TabItem Header의 DataTemplate을 정의했습니다. Header는 ContentControl과 Button으로 구성됩니다. TabItem에로드 될 뷰의 ViewModel에 정의 된 이벤트에 단추의 명령을 바인딩하는 코드를 따릅니다. TabItem의의 내용은 CommandParameter로 전달되는 실제이다 :

<Button Command="{Binding DataContext.DataContext.CloseViewCommand, RelativeSource={RelativeSource AncestorType={x:Type TabItem}}}" CommandParameter="{Binding Content, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TabItem}}}"> 

버튼 클릭이보기의 뷰 모델 내부에 정의 된 관리 코드, 즉 동적으로로드 된 모듈 내부에 정의된다.

public DelegateCommand<object> CloseViewCommand 
     { 
      get 
      { 
       if (_closeViewCommand == null) 
        _closeViewCommand = new DelegateCommand<object>(CloseView); 
       return _closeViewCommand; 
      } 
     } 
private void CloseView (object view) 
     { 

      if (_regionManager.Regions[MainWindowRegions.MainContentRegion].Views.Contains(view)) 
       _regionManager.Regions[MainWindowRegions.MainContentRegion].Remove(view); 
     }