wpf - 在 DataTemplate 中绑定用户控件 Datacontext
问题描述
我在 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;
}
}
现在,两种可能的 ViewModelChildViewModel
是LayersViewModel
和UserDrawnLayersViewModel
。当我更改ChildViewModel
为其中之一时,视图会通过DataTemplate
. 但DataContext
实际上并没有设置。没有任何东西被束缚。我尝试为 MainLayerTabViewModel 中的每个 ViewModel 创建单独的属性,并将DataContext
每个视图的属性绑定到它自己的属性,但这也不起作用。
解决方案
我尚未对此进行验证,但是我可以看到您的代码存在一些问题。
视图应该是
<ContentControl Content="{Binding ChildViewModel}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type vm:LayersViewModel}">
<views:LayersTabView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:UserDrawnLayersViewModel}">
<views:AlternateLayersTabView/>
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
视图模型:
public class MainLayerTabViewModel : ViewModelBase
{
public ViewModelBase ChildViewModel { get; set; }
public MainLayerTabViewModel()
{
ChildViewModel = new LayersViewModel();
//or ChildViewModel = new UserDrawnLayersViewModel();
}
}
希望有帮助..
推荐阅读
- django - 如何在队列中同步添加文件?
- sass - 在 sass 地图中获取前 X 行?
- maven - WebDriverManager 导入 io.github 无法解析
- elasticsearch - 如何从远程计算机连接到弹性搜索服务器?
- python - 在熊猫数据框中通过堆栈获取最大值
- asp.net - Safari 用户访问时在站点之间共享 Windows 身份验证
- testing - Grails 4:如何测试依赖于转换器的代码(如“as JSON”)
- python - 如何使用 Keras 中的训练模型预测输入图像,.h5 保存文件?
- python - 在 Python3 中使用结构记录解析串行数据
- sql-server - 根据输入参数更改 WHERE 子句