2013-05-13 62 views
0

我試圖使用TabControl來顯示多個視圖,但我很困惑,正確設置DataContext的視圖。我在幾次討論中發現DataContext(這裏是TemplateViewModel)會自動設置爲視圖(這裏是TemplateView),但這對我不起作用。WPF MVVM TabControl DataContext爲null

主窗口:

<TabControl Grid.Row="1" ItemsSource="{Binding Tabs}" SelectedIndex="{Binding SelectedTab}"> 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding TabName}"/> 
      </DataTemplate> 
     </TabControl.ItemTemplate> 
     <TabControl.ContentTemplate> 
      <DataTemplate DataType="{x:Type models:TemplateViewModel}"> 
       <views:TemplateView /> 
      </DataTemplate> 
     </TabControl.ContentTemplate> 
    </TabControl> 

MainWindowViewModel:

private ObservableCollection<ViewModelBase> _tabs; 

public ObservableCollection<ViewModelBase> Tabs 
    { 
     get { return _tabs; } 
     set { SetValue(ref _tabs, value, "Tabs"); } 
    } 

public SomeEvent() 
    { 
     TemplateViewModel model = new TemplateViewModel(); 
     model.TabName = value; 
     Tabs.Add(model); 
     SelectedTab = Tabs.IndexOf(model); 
    } 

在 'SomeEvent',我創建了一個新的TemplateViewModel並將其添加到類型的ObservableCollection的標籤集合。在MainView上顯示帶有正確tabname和TemplateView的新選項卡。問題是,如果我嘗試在TemplateView構造函數中獲取DataContext,則上下文爲空。任何想法?

public TemplateView() 
    { 
     InitializeComponent(); 

     TemplateViewModel model = (TemplateViewModel)DataContext; 
    } 

回答

0

在構造函數中添加MainWindow.xaml.cs

this.DataContext = new MainWindowViewModel(); 
+0

謝謝快速答覆。在MainWindow中,我已經在你寫的時候設置了DataContext,這應該不是問題。 – user2377283 2013-05-13 11:05:31

+0

嗨,亞當,還有其他想法嗎?謝謝 – user2377283 2013-05-13 15:11:34