2011-08-01 12 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) 

の複数のインスタンスを追加していTabControlのを持っていますが、URIが同じであるため、すべてのタブが同じビューで読み込まれますと変更が反映するので各タブにどちらの場合であってはならない。それぞれのビューモデルを別々に使うべきですか?どんな例であれ大いに役立つでしょう。

+0

これは私がUXTabItem.Sourceプロパティは、主に、顧客情報などの静的XAMLの内容に使用される、など私たちの連絡先情報思ったサードパーティ製のコンポーネントですが?あなたは "子供"の明示的なインスタンスを達成しようとしていますが、それをUserControlsとしてホストする必要があります。また、sourceプロパティには、Viewの基になるViewModel、chidlrens.xaml.csの背後にあるコードまでの知識はありません(UI作成の "childrens"に含めることはできません)... –

答えて

3

MVVMの主な目的/利点の1つは、コードで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をバインドします。各TabにはTabViewModelのインスタンスがあります。したがって、新しいTabを追加すると、ParentViewModelのTabsコレクションに新しいTabViewModelを追加することになります。

TabViewModelには、HeaderまたはUriなどのプロパティが含まれており、これらは適切な場所でUIにバインドされます。各TabViewModelは同じビューを使用して描画できますが、オブジェクト内のデータは各タブごとに異なります。

私ParentViewModelもこれはIMO、簡単ではありません、とレイチェルとロバートは両方とも正しいです

0

を選択しているタブを定義TabIndexプロパティが含まれます。

このタスクは、「作業スペース」を管理するの1、タブコントロールによって表される各あることのだと思うが、私は3つの関連する層

  1. DetailViewModelに私の見解モデルを構築したい - 。指定したワークスペースのモデル(
  2. MasterViewModel - 詳細ビューモデル(ObservableCollection {DetailViewModel})のコレクションのモデルです。これを使用して、編集/表示用に選択できる項目を示すプレゼンテーションのリストにバインドしますあなたが許可している場合、リストのフィルタリングも処理されます。
  3. ShellViewModel - 実際にワークスペースのコレクション(ObservableCollection {Workspace}とそれを管理するコマンド(EditWorkspaceCommand、AddWorkspaceCommand、DeleteWorkspaceCommandなど))を持つモデルです。ワークスペースは、CloseCommandを持つDetailViewModelです。

見つけたJosh Smith's MVVM article on MSDNこのデザインをgrokkingに役立ちます。

HTH、
Berryl