为一个viewmodel WPF C#分配多个视图

时间:2015-09-24 13:45:46

标签: c# wpf data-binding datacontext

我有一个应用程序,我通过xaml中的datatemplate分配每个视图datacontext。

问题是我现在有一个viewmodel实现为单例,需要有两个视图使用它。

有没有办法在一个datatemplate中设置多个视图?

我知道的下面的东西不起作用,我只是用它作为我的意思的一个例子:

              <DataTemplate DataType="{x:Type viewModel:ThisViewModel}">
                    <view:ViewOne />
                    <view:ViewTwo />
              </DataTemplate>

由于

2 个答案:

答案 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作为父级控件,例如PanelGridStackPanel等,可以有多个视图如何在View上显示它。