我在WPF中有一个UserControl,里面有一个TreeView,如下所示:
<UserControl x:Class="SchemaElementsTree">
<TreeView
Name="tv1"
ItemsSource="{Binding XPath=.}"
ItemTemplate="{StaticResource rootTemplate}">
<TreeView.ItemContainerStyle>
<Style
TargetType="{x:Type TreeViewItem}">
<EventSetter
Event="MouseDoubleClick"
Handler="OnItemMouseDoubleClick" />
<Setter
Property="IsExpanded"
Value="False"></Setter>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</UserControl>
此用户控件正在另一个用户控件中使用,其中树视图的数据源是通过Xml数据提供程序提供的,如下所示:
<XmlDataProvider
x:Key="xmlData"
x:Name="xmlDataProvider"></XmlDataProvider>
<ScrollViewer
DataContext="{StaticResource xmlData}">
<uc:SchemaElementsTree x:Name="schemaTree"></uc:SchemaElementsTree>
</ScrollViewer>
到目前为止,一切都还可以。现在,在XmlDataProvider加载Xml文件之后,树视图将整个树显示为处于折叠状态的一个根节点。单击根节点并进一步向下按预期工作,展开单击的相应节点。
我现在需要的是,我有一个XPath,它引用了我分配给XmlDataProvider的Xml文件中的一个节点,并且想要一个获取此XPath并使该特定节点在树视图中可见的方法。
我尝试枚举树视图的Items
集合,但它只包含一个项目,即分配给XmlDataProvider的XmlDocument
。当我调试时,我看到TreeView.IsLoaded即使在我点击了许多节点并展开它们之后也是假的。
这里发生了什么以及如何做到这一点?