2011-05-05 117 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