如何将视图数据绑定到WPF中已存在的视图模型?

时间:2017-08-16 01:07:28

标签: c# wpf xaml mvvm data-binding

我正在研究WPF应用程序。该应用程序具有主窗口(主视图),该主窗口被“数据绑定”到主视图模型。这个主视图是实例化主视图模型的。

在此主窗口中,以编程方式创建子视图(即用户控件)。主窗口具有下拉列表,允许用户选择不同的视图。每个usercontrol视图都有一个相应的视图模型。

当用户选择下拉选项时,会触发要创建的新视图模型。然后,我使用数据模板将视图模型模板化为关联视图的实例,如下所示:

      <DataTemplate DataType = "{x:Type ViewModels:MyViewModel}">
           <Views:MyView />
      </DataTemplate>

我的问题:如何将“MyView”数据绑定到“MyViewModel”?我假设我需要向MyView.xaml添加一个合适的datacontext,但是,我不知道如何做到这一点,因为'MyView'没有创建'MyViewModel'的实例。我本质上想将我的视图数据绑定到以前存在的视图模型。有什么想法吗?

编辑:事实证明我的视图自动数据绑定到我的视图模型的数据模板。但是,我不确定为什么这只是神奇地起作用。这是怎么回事?

1 个答案:

答案 0 :(得分:0)

您必须使用contentcontrol绑定viewmodel。像这样。

<ContentControl DataContext="{Binding ViewModels}" Content="{Binding Path=CurrentlySelectedComboBoxViewModel}">
  <ContentControl.Resources>
     <DataTemplate DataType="{x:Type vm:TypeAViewModel}">
        <StackPanel>
           <local:TypeAUserControl />
           </StackPanel>
     </DataTemplate>

     <DataTemplate DataType="{x:Type vm:TypeBViewModel}">
        <StackPanel>
           <local:TypeBUserControl />
        </StackPanel>
     </DataTemplate>
  </ContentControl.Resources>
</ContentControl>