2012-07-24 2 views
2

몇 주 전에 WPF (C#에서)를 사용하기 시작했는데 이제 tabcontrol의 고급 사용에 대한 도움이 필요합니다.WPF MVVM의 동적 TabControl

나는 모두 MVMS (Model View ViewModel) 패턴을 사용하여 내 응용 프로그램을 디자인하고 있으며 코드 뒤에 파일 (inititalise xaml 파일)에 코드를 추가하지 않으려 고합니다.

내 문제는 버튼 (예 : '새 탭'버튼)을 클릭하면 내 세부보기 (페이지)의 인스턴스를 보여주는 내 MainWindow보기 (창)에서 동적으로 새 tabItem을 만드는 것입니다.

나는 웹상의 tabitem에서 동적으로 생성하는 것에 대해 많은 것을 발견했지만 종종 파일 뒤에 코드가 수정되었습니다. 나는 구속력을 사용하고 있지만, 이런 종류의 물건에 바인딩을 어떻게 사용할 수 있을지 모르겠습니다.

답변

3

MVVM이 도움이 될 것입니다.

MainWindow보기에 대한 ViewModel을 만듭니다. 거기에 DetailViewModels의 컬렉션 을 가질 수 있습니다. DetailViewModels의 ObservableCollection 만 사용하면됩니다.

보기에서 TabControlItemsSource을 해당 모음에 바인딩하십시오.

AddTab 버튼에는 명령 바인딩이있을 수 있습니다. 그 Command는 MainWindowViewModel에 게시 된 ICommand 파생 클래스가 될 수 있습니다. 버튼을 누르면 MainWindow ViewModel에서 끝나고 다른 DetailViewModel을 추가하고 보기를 그런 식으로 업데이트합니다.

여기 MVVM에이 우수한 비디오 tuturial을 보라 : Jason Dollinger on MVVM

그는 그이 홈페이지에 대한 예제와 상세 뷰 모델 및 명령과 함께 할 수있는 방법에 대해 설명합니다. 그의 비디오에서 개발

소스 코드는 여기에 있습니다 : Sourcecode on Lab49

아마 그냥 TabControl에 의해 을 사용하는 뷰 모델을 생성하기가 더욱 쉬워. TabControlDataContext을 TabControlViewModel로 설정하십시오. 이를 구현하기 위해 공개 속성으로 MainWindowViewModel에 TabControlViewModel을 게시하십시오.

일부 InitializeComponent를 제외하면 코드 숨김이 비어 있습니다.

+0

고맙습니다. – Desnoxav

+0

당신은 환영합니다! 이 작업을 직접 해보니 정말 잘 작동합니다. –

+0

그리고 바인딩에 무엇을 사용 했습니까? 종속성 속성 또는 INotifyPropertychanged. Personnaly 나는 잠시 동안 내 프로젝트에서 두 번째를 사용하지만 아직도 어떤 것이 더 좋은지 모른다. – Desnoxav

1

속성을 TabControl으로 바인딩 할 수 있습니다.이 속성은 탭 항목 모음을 나타냅니다. 그런 다음 ViewModel에서 컬렉션을 조작 할 수 있습니다.

2

MVVM by Sacha Barber의 Great set에는 탭 컨트롤을 사용하여 동적 뷰 생성 방식을 공개하는 다운로드 가능한 애플리케이션이 포함되어 있습니다. 기사에 첨부 된 데모 애플리케이션을 다운로드하여 동적 탭 컨트롤을 사용하는 방법을 확인할 수 있습니다. 예 :

탭 콘텐츠의 데이터 모델을 나타내는 작업 영역 모음을 바인딩해야하며 필요한 경우 탭에 대한 추가 속성이 필요합니다. 폐쇄 가능 여부, 불능 또는 불가능, 이름 등. 이것은 ViewModelBase 일 수 있습니다. 뷰 모델을 지원하는 탭 항목 템플릿을 만듭니다.

<TabControl x:Name="tabControl" 
       IsSynchronizedWithCurrentItem="True" 
       ItemsSource="{Binding Path=Workspaces}" 
       Template="{StaticResource DynamicTabControlTemplate}">   
</TabControl> 

= 새로운 작업 영역 등 ObservableCollection에 예를 들면 워크 스페이스

초기화 회수();

그리고 컬렉션 탭에 새 항목을 추가 한 후에도 컨트롤이 변경됩니다.