我有一个应用程序,我通过xaml中的datatemplate分配每个视图datacontext。
问题是我现在有一个viewmodel实现为单例,需要有两个视图使用它。
有没有办法在一个datatemplate中设置多个视图?
我知道的下面的东西不起作用,我只是用它作为我的意思的一个例子:
<DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewOne />
<view:ViewTwo />
</DataTemplate>
由于
答案 0 :(得分:3)
我不确定我是否完全理解你,但听起来你需要为你的DataTemplates分配一个键
<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>
答案 1 :(得分:1)
是的,可以向timesCalled
添加两个Views
,如下所示
DataTemplate
<DataTemplate x:Key="KeyName" DataType="{x:Type viewModel:ThisViewModel}">
<Grid>
<view:ViewOne />
<view:ViewTwo />
</Grid>
</DataTemplate>
可以添加任意类型的DataTemplate
作为父级控件,例如Panel
,Grid
,StackPanel
等,可以有多个视图如何在View上显示它。