2013-09-27 51 views
4

所以我有一个树视图绑定到一个动态加载的XML文件。使用XPath正确绑定来自XML的注释节点

然后,在另一个面板中,我有一个绑定到TreeViewItems的列表视图。

行为是当用户单击树中的某个项目时,任何属性或文本都显示在ListView中。

给出下面的XML

<Root> 
    <Child Name="Attribute"> 
    <!--Comment--> 
    <Content>Some text</Content> 
    </Child> 
</Root> 

我在树上,这正是我想要得到这个。

enter image description here

这是结合我使用的TreeViewItems绑定到ListView

<Binding XPath="@*|text()|comment()" /> 

可正常工作,但并不像我想:)。

它将注释显示为其父项的属性,因此如果单击树节点Child,我会看到ContentComment

enter image description here

但如果我点击树的Comment节点本身我什么也没得到

enter image description here

这不是我想要的。我更喜欢如果点击Child节点,我只能得到属性和文本 - 而不是通讯,但如果我点击Comment节点,那么我应该在ListView中显示评论的值。

我很确定秘密在于xPath欺骗,但是我一直没能把它弄清楚。

更改到

<Binding XPath="@*|text()|//comment()" /> 

结合添加注释到Comment节点(好)的价值,但在树以及所有其他节点(坏)。我试过在绑定上抛出一些not()条件,但无济于事。

更改到

<Binding XPath="@*|text()|../comment()" /> 

结合更接近,因为它当时正确地结合注释节点的评论,但ASLO到包含注释的节点的任何其他的孩子。

我需要什么(我觉得)这是改变成类似

<Binding XPath="@*|text()|../comment()[not(NodeType != Comment)]" /> 

的一些方式,则仅选择此评论它当前上下文节点是一条评论。 但是这个例子失败了。

在这一点上,我只是随意尝试新事物,所以我想现在是时候要问:)

任何人都可以提出一个结合,将完成我已(希望充分)描述?

回答

4

试试这个:

<Binding XPath="@*|text()|self::comment()" /> 
+0

哈!如此美丽而简单。对于迟到的回复很抱歉,忙于其他项目。谢谢! –