2017-08-16 108 views
-1

我正在处理WPF应用程序。此应用程序具有一个主窗口(主视图),可以将数据绑定到主视图模型。这个主视图是实例化主视图模型。如何将视图绑定到WPF中已有的视图模型?

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

当用户选择下拉选项时,会触发一个新的视图模型被创建。然后我用数据模板与模板视图模型到相关观点的一个实例,如下图所示:

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

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

编辑:事实证明,我的看法自动databinds到我的视图模型的数据模板。不过,我不确定为什么这只是神奇的作品。这里发生了什么?

+0

这并不神奇。这就是WPF的_designed_和_documented_。当WPF将模板映射到您的视图模型对象时,它必然具有您的视图模型对象引用,并且它只是简单地将模板的顶级元素的'DataContext'设置为该视图模型。它实际上非常简单,比WPF为了实际查找首先使用的模板(为什么不认为_that_部分是魔术?)要简单得多。 –

回答

0

你必须将你的viewmodel与contentcontrol绑定。喜欢这个。

<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> 
相关问题