2011-05-05 108 views
0

我有一個使用模型視圖體系結構的樹視圖,每個TreeViewItem都有一個windows窗體屬性,當我單擊一個節點時,我希望應用程序顯示與該節點關聯的窗體樹的右側。WPF將樹視圖綁定到UserControl

如何使用綁定來實現此功能我嘗試了以下方法,但與ApplicationForms關聯的用戶控件未顯示。

<ContentControl Margin="163,5,127,5" Content="{Binding SelectedItem,ElementName=ApplicationTree}"> 
     <ContentControl.Resources> 
      <DataTemplate DataType="{x:Type local:ApplicationViewModel}"> 
       <StackPanel> 
        <TextBlock Text="Displaying an A!" /> 

        <ContentPresenter Name="MyContent"> 
         <ContentPresenter.Content> 
          <UserControl x:Name="UserCntrl2" HorizontalAlignment="Stretch" Height="Auto" Width="Auto" Content="{Binding ApplicationForms}"/> 
         </ContentPresenter.Content> 
        </ContentPresenter> 
       </StackPanel> 
      </DataTemplate> 

      <DataTemplate DataType="{x:Type local:ApplicationsViewModel}"> 
       <StackPanel> 
        <TextBlock Text="Displaying a B!" /> 
        <!--<TextBlock Text="{Binding Bar}" />--> 
       </StackPanel> 
      </DataTemplate> 
     </ContentControl.Resources> 
    </ContentControl> 
+0

看起來很好,我有任何綁定錯誤? – 2011-05-05 14:20:15

+0

(在Visual Studio的輸出窗口中發現綁定錯誤) – 2011-05-05 15:51:01

+0

我不是100%確定的,但我認爲我試圖顯示WindowsForm的事實可能是應該託管在WindowsFormsHost中的問題。但是,似乎windows窗體控件不支持綁定,所以我將被迫讓ApplicationsViewModel直接調用頂層應用程序。 – Jon 2011-05-05 16:45:22

回答

0

由於您使用的是MVVM,因此您可以在視圖模型中另外添加這種邏輯。您可以將樹節點的IsSelected屬性綁定到您的視圖模型,然後當IsSelected通過wpf設置爲true時(當使用該選項時),您可以執行任何您想要的操作。

以這種方式使用視圖模型是非常有用的模式。您的視圖模型可以引用各種東西,並根據選擇或擴展來影響它們。你也可以去周圍的其他方法,並有一些代碼影響的ViewModels,讓數據綁定更新實際控制

Here is a pretty good article on MVVM and treeview

您也應該檢查HierarchicalDataTemplate,如果你與樹視圖

工作 - 編輯-

正確閱讀問題後,我看到你已經在做正確的事情,那就是將你的主控制綁定到樹形視圖的SelectedItem。雖然我相信SelectedItem屬性指向TreeViewItem,但不是實際的VM。也許這就是問題所在?

+0

我想你可能錯過了那裏的觀點。 – 2011-05-05 14:19:41

+0

也許:)我得到的印象OP想要顯示樹視圖旁邊的內容,在主 - 明細情況下。 – aL3891 2011-05-05 14:25:20

+0

是的,但我認爲主人完成了,這只是關於細節。 – 2011-05-05 14:33:13