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 タイプのタブ コレクションに追加します。正しいタブ名と TemplateView を持つ新しいタブが MainView に表示されます。問題は、TemplateView コンストラクターで DataContext を取得しようとすると、コンテキストが空になることです。何か案が?
public TemplateView()
{
InitializeComponent();
TemplateViewModel model = (TemplateViewModel)DataContext;
}