我有一个使用模型视图架构的树视图,每个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>
答案 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。也许这就是问题所在?