我正在尝试使用 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>
主窗口视图模型:
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 类型的选项卡集合中。具有正确选项卡名称和 TemplateView 的新选项卡将显示在 MainView 上。问题是,如果我尝试在 TemplateView 构造函数中获取 DataContext,则上下文为空。任何想法?
public TemplateView()
{
InitializeComponent();
TemplateViewModel model = (TemplateViewModel)DataContext;
}