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
?