WPF MVVM: настройка DataContext представлений вкладок

Я испытал странное обязательное поведение, которое описаноВот, Я сделал много устранения неполадок, и я пришел к выводу, что наиболее вероятная проблема заключается в том, как я устанавливаюDataContext каждого вида вкладки.

у меня естьTabControl чьяItemsSource привязан к спискуViewModels.

MainView:
<TabControl ItemsSource="{Binding TabList}">
    <TabControl.Resources>
        <DataTemplate DataType="{x:Type vm:Tab1ViewModel}">
            <v:Tab1 />
        </DataTemplate>
    </TabControl.Resources>
...
</TabControl>

MainViewModel:
public ObservableCollection<TabViewModelBase> TabList { get; set; }
public MainViewModel()
{
    this.TabList = new ObservableCollection<TabViewModelBase>();

    // Tab1ViewModel is derived from TabViewModelBase
    this.TabList.Add(new Tab1ViewModel()); 
}

Итак, теперьMainViewModel имеет списокTabViewModelBase, который я считаю правильным MVVM способ сделать это. Вид (Tab1) заTabViewModelBase определяется с помощьюDataTemplate.

Вот где проблема:

Tab1:
<UserControl.Resources>
    <vm:Tab1ViewModel x:Key="VM" />
</UserControl.Resources>
<UserControl.DataContext>
    <StaticResourceExtension ResourceKey="VM" />
</UserControl.DataContext>

Я думаю, что большинство людей сделали бы это также, но ... есть кое-чтоужасно неправильно с таким подходом!

ВMainViewModelЯ вручную создал экземплярTab1ViewModel, ВMainView, Я использовалDataTemplate сказать представлению использоватьTab1 всякий раз, когда он видитTab1ViewModel, Это означаетMainView будет создавать объектTab1 учебный класс.

Сейчас,Tab1 нуждается в своемDataContext делать связывание со своим собственнымTab1ViewModelпоэтому мы используемStaticResource добавить одинTab1ViewModelразве что это совершенно новый экземпляр!

Мне нужно установитьDataContext вернуться к оригиналу, который я создал вMainViewModel, Итак, как мне установитьDataContext изTab1 вDataTemplate?

Ответы на вопрос(2)

Ваш ответ на вопрос