WPF MVVM TabControl DataContext为null

时间:2013-05-13 10:28:46

标签: wpf mvvm tabcontrol datacontext

我正在尝试使用TabControl来显示多个视图,但我对视图的DataContext的正确设置感到困惑。我在几个讨论中发现DataContext(这里是TemplateViewModel)将自动设置为视图(这里是TemplateView),但这对我来说不起作用。

主窗口:

<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类型的tabs集合中。 MainView上显示具有正确tabname和TemplateView的新选项卡。问题是,如果我尝试在TemplateView构造函数中获取DataContext,则上下文为空。有什么想法吗?

public TemplateView()
    {
        InitializeComponent();

        TemplateViewModel model = (TemplateViewModel)DataContext;
    }

1 个答案:

答案 0 :(得分:0)

在构造函数中的MainWindow.xaml.cs中添加

this.DataContext = new MainWindowViewModel();