У меня есть два пользовательских элемента управления внутри TabItem.TabItem имеет свой собственный ViewModel, у которого есть свойство, к которому привязано содержимое дочернего ContentControl элемента TabItem.Это свойство представляет другую модель представления, которая изменит представление в зависимости от того, какое оно есть.Вот пример:
<TabItem DataContext="{Binding Path=MainLayerTabViewModel, Source={StaticResource ViewModelLocator}}" Header="Layers">
<ContentControl Content="{Binding ChildViewModel}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:LayersViewModel}">
<views:LayersTabView DataContext="{Binding ChildViewModel}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:UserDrawnLayersViewModel}">
<views:AlternateLayersTabView DataContext="{Binding ChildViewModel}" />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
Вот модель представления, используемая в качестве текста данных для tabitem:
public class MainLayerTabViewModel : ViewModelBase
{
public object ChildViewModel { get; set; }
public MainLayerTabViewModel()
{
ChildViewModel = (App.Current.Resources["ViewModelLocator"] as ViewModelLocator).LayersViewModel;
}
}
Теперь два типа возможных моделей представления для ChildViewModel
: LayersViewModel
и UserDrawnLayersViewModel
.Когда я изменяю ChildViewModel
на один из них, вид должным образом переключается через DataTemplate
.Но DataContext
на самом деле не устанавливается.Ничто не связано.Я попытался создать отдельные свойства для каждой ViewModel в MainLayerTabViewModel и связать DataContext
каждого представления с его собственным свойством, но это тоже не сработало.