Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将多个视图指定给一个viewmodel WPF C#_C#_Wpf_Data Binding_Datacontext - Fatal编程技术网

将多个视图指定给一个viewmodel WPF C#

将多个视图指定给一个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

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

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

是否有办法在一个datatemplate中设置多个视图

下面这种我知道不起作用的东西,我只是用这个例子来说明我的意思:

              <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想要的。谢谢:)请检查答案和评论,要求澄清,但从未给出,也未接受答案。我建议更新您的问题,以澄清并说明您选择的方法(并接受答案)。请检查答案和评论,要求澄清,但从未给出,也未接受答案。我建议更新您的问题,以澄清并说明您选择的方法(并接受答案)