4

所以我有一个绑定到动态加载的 xml 文件的树视图。

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

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

给定以下 xml

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

我把这个放在我的树上,这正是我想要的。

在此处输入图像描述

这是我用来将 TreeViewItems 绑定到 ListView 的绑定

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

这按预期工作,但不是我想要的:)。

它将注释呈现为其父级的属性,因此如果我单击树节点Child,我将同时看到ContentComment

在此处输入图像描述

但是,如果我单击Comment树中的节点本身,我什么也得不到

在此处输入图像描述

这不是我想要的。我更喜欢如果我点击Child节点,我只会得到属性和文本——而不是commnets,但是如果我点击Comment节点,那么我应该在 ListView 中看到评论的值。

我很确定秘诀在于 xPath 诡计,但我一直没能把它弄好。

将绑定更改为

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

将 Comment 的值添加到Comment节点(好),但也添加到树中的每个其他节点(坏)。我试过在not()绑定上加入一些条件,但无济于事。

将绑定更改为

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

更接近,因为它随后将评论正确绑定到评论节点,但也绑定到包含评论的节点的任何其他子节点。

我需要的(我认为)是某种将其更改为类似的方式

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

也就是说,如果当前上下文节点是评论,则仅选择此评论。但是这个例子失败了。

在这一点上,我只是在随机尝试,所以我想是时候问了:)

任何人都可以提出一个可以完成我(希望充分)描述的绑定吗?

4

1 回答 1

4

尝试这个:

<Binding XPath="@*|text()|self::comment()" />
于 2013-10-01T14:51:42.997 回答