WPF将Treeview元素绑定到UserControl

时间:2011-05-05 13:42:20

标签: c# wpf xaml treeview

我有一个使用模型视图架构的树视图,每个TreeViewItem都有一个Windows窗体属性,当我点击一个节点时,我希望应用程序将该节点关联的窗体显示在树的右侧。

如何使用绑定实现此功能我已尝试过以下操作,但不会显示与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>

1 个答案:

答案 0 :(得分:0)

由于您正在使用MVVM,因此您可以在视图模型中交替使用这种逻辑。然后,您可以将树节点的IsSelected属性绑定到viewmodel,然后当Wpf将IsSelected设置为true时(当使用选择项目时),您可以执行任何操作。

这是一种非常有用的模式,可以通过这种方式使用视图模型。你的viewmodels可以引用各种东西,并根据选择或扩展来影响它们。你也可以反过来让代码影响viewmodels并让数据绑定更新实际的控件

Here is a pretty good article on MVVM and treeview

如果您正在使用树视图

,还应该查看HierarchicalDataTemplate

-edit -

在正确阅读问题之后,我发现你已经做了正确的事情,即将你的主控制绑定到Treeview的SelectedItem。我确实相信SelectedItem属性指向TreeViewItem,而不是实际的VM。也许这就是问题所在?