为一个视图模型分配多个视图
本文关键字:视图 模型 分配 一个 | 更新日期: 2023-09-27 18:14:28
我有一个应用程序,我通过xaml中的数据模板为每个视图分配数据上下文。
问题是我现在有一个视图模型实现为单例,需要有两个视图使用它。
是否有办法在一个数据模板中设置多个视图?
像下面这样的东西,我知道是行不通的,我只是用这个作为我的意思的一个例子:
<DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewOne />
<view:ViewTwo />
</DataTemplate>
谢谢
我不确定我是否完全理解你,但听起来你需要为你的DataTemplates分配一个Key
<DataTemplate x:Key="DataTemplate1" DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewOne />
</DataTemplate>
<DataTemplate x:Key="DataTemplate2" DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewTwo />
</DataTemplate>
然后从你的常规XAML中,你可以通过它的键来指定你想要为每个区域使用的模板,像这样:
<ContentControl Content="{Binding MyViewModel}"
ContentTemplate="{DynamicResource DataTemplate1}" />
<ItemsControl ItemsSource="{Binding MyViewModels}"
ItemTemplate="{DynamicResource DataTemplate2}" />
如果我误解了,你实际上想要一个包含两个视图的数据模板,这没有问题。DataTemplates可以有任意多的元素,但是它们只能有一个主子元素,所以让这个元素成为一个面板,用来告诉WPF如何安排这两个视图。
<DataTemplate x:Key="DataTemplate1" DataType="{x:Type viewModel:ThisViewModel}">
<StackPanel>
<view:ViewOne />
<view:ViewTwo />
</StackPanel>
</DataTemplate>
可以像下面这样将两个Views
添加到DataTemplate
中,
<DataTemplate x:Key="KeyName" DataType="{x:Type viewModel:ThisViewModel}">
<Grid>
<view:ViewOne />
<view:ViewTwo />
</Grid>
</DataTemplate>
DataTemplate
可以有一个以上的视图通过添加任何类型的Panel
作为父控件,如Grid
, StackPanel
, WrapPanel
等都基于你想如何在视图上显示它。