2011-08-01 5 views
0

MVVM 학습을 시작했습니다. 나는 여러 같은보기/페이지의 경우MVVM - WPF 데스크탑

Dim tb As New UXTabItem 

    tb.Header = "Childrens" 

    tb.Name = "tab" & itrt 
    itrt = itrt + 1 

    tb.Source = New Uri("/Views/childrens.xaml", UriKind.Relative) 
UXTabControl1.Items.Add(tb) 
다른 데이터를 처리 할 같은보기의 각 이후

하지만 URI가 동일하기 때문에 그래서 모든 탭이 동일한보기 및 변경 반영으로 채워을 추가 오전에 TabControl을 각 탭에. 어떤 경우에는 안된다. 각각에 대해 별도의 viewmodel을 사용해야합니까? 모든 예가 많은 도움이 될 것입니다.

+0

이 내가 UXTabItem.Source 속성은 고객 정보로 정적 XAML 내용에 주로 사용되는 생각 제 3 자 구성 요소이지만
Berryl은 우리에게 등 연락처 정보를? "childrens"의 명시적인 인스턴스를 얻으려고하면 UserControls로 호스팅해야합니다. 또한 소스 속성은 View의 기본 ViewModel에 chidlrens.xaml.cs 뒤에있는 코드까지도 인식하지 못합니다 (UI를 "childrens"로 만들 때 포함시키지 않으므로) ... –

답변

3

MVVM의 주요 목표 중 하나는 코드에서 WPF UI 개체를 만들지 않는다는 것입니다.

뷰 모델 개체 모음을 채우고 XAML에 정의한 TabControlItemsSource을 바인딩해야합니다. 런타임에로드하는 대신 해당 개체의 데이터 형식에 대해 DataTemplate을 정의하고 XAML을 거기에 넣어야합니다. 이 템플릿을 사용하기 때문에

TabControl은 조금 까다 롭습니다 다음 ItemTemplate이 탭의 모양을 정의하는 데 사용되며, ContentTemplate은 탭 항목 '콘텐츠의 모양을 정의하는 데 사용됩니다. 그것은이를보고 꽤 흔한 일 : 뷰 모델에 Text 속성 탭을 채 웁니다

<TabControl ItemsSource="{Binding MyItems}"> 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
     <TextBlock Text="{Binding Text}"/> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
     <ContentPresenter Content="{Binding}"/> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 

및 리소스 사전에 어떤 템플릿 탭 항목의 내용은보기 모델의 유형과 일치합니다.

2

부모 인 ViewModel에 ObservableCollection<TabViewModel> Tabs이 있고 TabControl의 ItemSource를 바인딩합니다. 각 탭에는 TabViewModel의 인스턴스가 있으므로 새 Tab을 추가하면 ParentViewModel의 Tabs 컬렉션에 TabViewModel이라는 새 항목이 추가됩니다.

TabViewModel은 Header 또는 Uri과 같은 속성을 포함하며, 해당 지점의 UI에 바인딩됩니다. 각 TabViewModel은 같은 View를 사용해 draw 할 수 있습니다 만, 오브젝트 내의 데이터는 탭마다 다릅니다.

내 ParentViewModel 또한이 IMO, 사소한되지 않으며, 레이첼과 로버트 모두 옳다

0

을 선택하는 탭 정의하는 TabIndex 속성이 포함됩니다. . 주어진 작업 공간의 모델 (- 탭 컨트롤로 표현 각 내가 세 관련 층

  1. DetailViewModel으로 내보기 모델을 구성하고자 '관리'작업 공간 중 하나 인이 작업의

    생각해

  2. MasterViewModel - 상세 뷰 모델 (ObservableCollection {DetailViewModel}) 컬렉션 용 모델입니다.이 항목을 사용하여 편집/표시 할 항목을 선택할 수있는 프리젠 테이션 목록에 바인딩합니다 탭 컨트롤에서 허용하는 경우 목록의 필터링도 처리됩니다.
  3. ShellViewModel - 실제로 작업 공간의 모음을 가지고있는 모델입니다 (예 : ObservableCollection {Workspace} 및이를 관리하는 명령 (예 : EditWorkspaceCommand, AddWorkspaceCommand, DeleteWorkspaceCommand). 작업 영역은 CloseCommand가있는 DetailViewModel입니다.

이 디자인을 grokking하는 데 유용한 Josh Smith's MVVM article on MSDN이 발견되었습니다.

HTH,