2017-08-16 81 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> 
相關問題