将多个视图分配给一个视图模型 WPF C#

d19*_*224 0 c# data-binding wpf datacontext

我有一个应用程序,我通过 xaml 中的数据模板分配每个视图数据上下文。

问题是我现在有一个作为单例实现的视图模型,并且需要有两个视图使用它。

有没有一种方法可以在一个数据模板中设置多个视图?

我知道像下面这样的东西是行不通的,我只是用这个作为我的意思的例子:

              <DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
                    <view:ViewOne />
                    <view:ViewTwo />
              </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

谢谢

Rac*_*hel 5

我不确定我是否完全理解您的意思,但听起来您需要为您的 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>
Run Code Online (Sandbox Code Playgroud)

然后,在常规 XAML 中,您可以通过键指定每个区域要使用的模板,如下所示:

<ContentControl Content="{Binding MyViewModel}" 
                ContentTemplate="{DynamicResource DataTemplate1}" />

<ItemsControl ItemsSource="{Binding MyViewModels}" 
              ItemTemplate="{DynamicResource DataTemplate2}" />
Run Code Online (Sandbox Code Playgroud)

如果我误解了,并且您实际上想要一个包含两个视图的数据模板,那么这没有问题。DataTemplates 可以拥有任意数量的元素,但是它们只能有一个主要子元素,因此请将该元素设置为一个面板,用于告诉 WPF 如何排列两个视图。

  <DataTemplate x:Key="DataTemplate1" DataType="{x:Type viewModel:ThisViewModel}">
      <StackPanel>
          <view:ViewOne />
          <view:ViewTwo />
      </StackPanel>
  </DataTemplate>
Run Code Online (Sandbox Code Playgroud)