2013-02-21 77 views
0

'm試圖創建一個包含多個項目的tabcontrol的主窗口(每個項目僅在需求時顯示)...假設我們有類型A的項目,類型B的項目和項目的類型C 我想(使用MVVM模式)有一個可觀察的對象集合代表我的tabitems,並與我的userscontrols(每個tabitem是一個用戶控件)... 問題是,我沒有數字瞭解如何去做。將TabControl綁定到具有不同內容的ObservableCollection

我一個tabItemViewModelBase類:

public class TabItemViewModelBase : ViewModelBase 
    { 

     //Fields : 
     RelayCommand _closeCommand; 


     //Constructor: 
     public TabViewModel(string header) 
     { 
      this.Header = header; 
     } 

} 
在我的主窗口數據上下文

,我這個類的一個觀察的集合:

//Propriétés 
     ObservableCollection<TabViewModel> _tabItems; 

在我的主窗口我已經下面的標籤爲TabControl項目

<TabControl Padding="0" ItemsSource="{Binding Path=Workspaces}"> 
      <TabControl.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Header}"/> 
       </DataTemplate> 
      </TabControl.ItemTemplate> 
      <TabControl.ContentTemplate> 
       <DataTemplate> 
        **<view:ClientView/>** 
       </DataTemplate> 
      </TabControl.ContentTemplate> 

     </TabControl> 

但正如您所看到的,所有項目都附加到ClientV用戶控件和我使用tabviewitem創建我的項目,我需要一個屬性或方式來指定每個元素的observablecollection的內容形式...

(我有一個ClientListingViewModel類和ClientCreationViewModel類),我不能同時使用,因爲我不知道如何爲每個人指定視圖!

謝謝!

回答

4

要指定針對特定視圖模型的視圖,可以在數據模板中執行此操作。

首先,您需要爲您的視圖和viewmodel名稱空間添加一個名稱空間引用。我已經包含了一個使用Window的例子,但它也適用於UserControls。

<Window ... 
     xmlns:v="clr-namespace:PutYourViewNamespaceHere" 
     xmlns:vm="clr-namespace:PutYourViewModelNamespaceHere"> 

接下來,您將需要在容器的資源部分中定義數據模板。 在下面的例子中,我使用的ClientListingView作爲DataTemplate中的ClientListingViewModel

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:ClientListingViewModel"> 
      <v:ClientListingView /> 
    </DataTemplate> 
    <DataTemplate DataType="{x:Type vm:ClientCreationViewModel"> 
      <v:ClientCreationView /> 
    </DataTemplate> 
</Window.Resources> 
+1

小型通知 - 這是更好地把你的DataTempalates聲明在App.xaml中,或以任何資源文件合併在App.xaml中。它應該爲你節省一些內存(特別是在用戶控制的情況下)。 – Woodman 2013-02-21 12:17:21

+0

問題是viewModel部分位於另一個庫上,當我嘗試在XML文件中引用它時,我無法訪問所有ViewModel類(要做{x:Type vm:ClientListingViewModel) – Mohtaa 2013-02-21 13:32:21

+0

我已經訪問我的viewModel – Mohtaa 2013-02-21 13:36:30

相關問題