0

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;
    }
4

1 に答える 1

0

コンストラクターの MainWindow.xaml.cs に追加

this.DataContext = new MainWindowViewModel();
于 2013-05-13T10:40:24.880 に答える