将多个视图指定给一个viewmodel WPF C#
我有一个应用程序,通过xaml中的datatemplate分配每个视图datacontext 问题是我现在有一个viewmodel作为单例实现,需要有两个视图使用它 是否有办法在一个datatemplate中设置多个视图 下面这种我知道不起作用的东西,我只是用这个例子来说明我的意思:将多个视图指定给一个viewmodel WPF C#,c#,wpf,data-binding,datacontext,C#,Wpf,Data Binding,Datacontext,我有一个应用程序,通过xaml中的datatemplate分配每个视图datacontext 问题是我现在有一个viewmodel作为单例实现,需要有两个视图使用它 是否有办法在一个datatemplate中设置多个视图 下面这种我知道不起作用的东西,我只是用这个例子来说明我的意思: <DataTemplate DataType="{x:Type viewModel:ThisViewModel}"> <view
<DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
<view:ViewOne />
<view:ViewTwo />
</DataTemplate>
谢谢我不确定是否完全理解您,但听起来您需要为数据模板分配一个密钥
<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>
我不确定是否完全理解您,但听起来您需要为数据模板分配一个密钥
<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>
是可以向
数据模板添加两个视图
,如下所示
<DataTemplate x:Key="KeyName" DataType="{x:Type viewModel:ThisViewModel}">
<Grid>
<view:ViewOne />
<view:ViewTwo />
</Grid>
</DataTemplate>
DataTemplate
可以有多个视图,方法是添加任何类型的面板
作为父控件,如Grid
、StackPanel
、WrapPanel
等,所有这些都取决于您希望在视图上的显示方式 是可以向数据模板添加两个视图
,如下所示
<DataTemplate x:Key="KeyName" DataType="{x:Type viewModel:ThisViewModel}">
<Grid>
<view:ViewOne />
<view:ViewTwo />
</Grid>
</DataTemplate>
DataTemplate
可以有多个视图,方法是添加任何类型的面板
作为父控件,如Grid
、StackPanel
、WrapPanel
等,所有这些都取决于您希望在视图上的显示方式 听起来像是,他想在一个DataTemplate
中添加两个视图,共享ViewModel
@AbinMathew啊,我已经编辑了我的答案,如果这是OP想要的,我会将其包括在内。谢谢:)听起来像是,他想在一个DataTemplate
中添加两个视图,这两个视图共享ViewModel
@AbinMathew啊,我已经编辑了我的答案,如果这是OP想要的。谢谢:)请检查答案和评论,要求澄清,但从未给出,也未接受答案。我建议更新您的问题,以澄清并说明您选择的方法(并接受答案)。请检查答案和评论,要求澄清,但从未给出,也未接受答案。我建议更新您的问题,以澄清并说明您选择的方法(并接受答案)