【发布时间】:2011-10-03 10:36:25
【问题描述】:
我有一个绑定到数据的 TreeView(MVVM 模型),我在其中使用用户控件进行数据显示。
<HierarchicalDataTemplate
DataType="{x:Type vm:SiteViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<uc:MyUserControl x:Name="control1" Text="{Binding SiteName}" />
</StackPanel>
</HierarchicalDataTemplate>
选择项目后,我需要访问用户控件本身。
我找到了一个与我想要的类似的示例,但它使用了 TreeViewItem.Header。在我的代码中,由于绑定,TreeViewItem.Header 是 SiteViewModel 对象。
有没有一种简单的方法可以从 TreeViewItem 本身检索实际的用户控件(MyUserControl 类型)?
谢谢。
【问题讨论】:
-
为什么需要访问控件?为什么不能访问控件的视图模型并对其进行修改?
-
我需要访问控件才能在其上设置属性。用户控件将在显示 TextBlock 和 TextBox 之间切换,以便我可以在 TreeView 中进行“就地”编辑。无论如何,这是计划,但我开始认为这对我来说可能有点先进!也许有更好的方法来实现这一点。
-
是的,看看 MVVM。这将允许您操纵模型而不是视图本身。视图将通过数据绑定/触发器来响应模型中的变化。
-
但是,如果做不到这一点,您始终可以使用
LogicalTreeHelper/VisualTreeHelper在树中挖掘以找到您的UserControl实例。
标签: wpf data-binding user-controls treeview