是的,我需要使用XPath
,但有更多的东西。
我的错误是:
不能直接使用DataSet
但需要将其包装在一个XmlDataDocument
也是我的问题涉及到的命名空间。为了抑制它们,你必须在创建XmlDataDocument
之前设置DataSet.Namespace = String.Empty
。
如果你想使用命名空间,你必须这样
<UserControl.Resources>
<XmlNamespaceMappingCollection x:Key="namespace">
<XmlNamespaceMapping Prefix="ds" Uri="http://tempuri.org/DataSet.xsd" />
</XmlNamespaceMappingCollection>
</UserControl.Resources>
XAML创建一个XmlNamespaceMappingCollection
为了引用命名空间中的XPath。简单地将它添加为xmlns将不起作用(与我预期的相反)。
然后引用某行的工作是这样的:
<Label Content="{Binding XPath='//TableName[4]'}" />
如果你使用的命名空间,你需要引用XmlNamespaceManager
<Label Content="{Binding XPath='//ds:TableName[4]'}" Binding.XmlNamespaceManager="{StaticResource namespace}" />
趁现在这个非常简单的XPath作品,添加约束将导致全CPU使用率和我的程序不能继续:
<Label Content="{Binding XPath='//TableName[Process = 4]'}" />
or
<Label Content="{Binding XPath='//ds:TableName[ds:Process = 4]'}" Binding.XmlNamespaceManager="{StaticResource namespace}" />
编辑 看起来绑定必须在OneTime
模式下。只需将其更改为
<Label Content="{Binding Mode=OneTime, XPath='//TableName[Process = 4]'}" />
使其工作。我也使用ContentTemplate
,在模板中绑定可能是TwoWay
,但XPath是原始的(例如./Prozess
),也许这就是原因。
好的,它停止崩溃,如果我设置'模式'为'OneTime', 虽然这不是我所需要的... – Mene 2010-01-07 17:40:38