为一个视图模型分配多个视图

本文关键字:视图 模型 分配 一个 | 更新日期: 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等都基于你想如何在视图上显示它。