【发布时间】:2019-02-14 01:49:51
【问题描述】:
我在 TabItem 中有两个用户控件。 TabItem 有它自己的 ViewModel,它有一个属性,TabItem 的子 ContentControl 的内容绑定到。此属性代表另一个视图模型,它将根据视图更改视图。这是一个例子:
<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 的两种可能的 ViewModel 是 LayersViewModel 和 UserDrawnLayersViewModel。当我将ChildViewModel 更改为其中之一时,视图将通过DataTemplate 正确切换。但是DataContext 实际上并没有被设置。没有任何东西被束缚。我尝试为 MainLayerTabViewModel 中的每个 ViewModel 创建单独的属性,并将每个视图的 DataContext 绑定到它自己的属性,但这也不起作用。
【问题讨论】:
-
LayersViewModel是如何实现的?它有ChildViewModel属性吗?LayersTabView的DataContext不应该是LayersViewModel本身吗?那么你应该删除DataContext="{Binding ChildViewModel}"。 -
是的,就是这样!谢谢。
标签: wpf mvvm datatemplate datacontext