2010-01-06 95 views
0

我有一个数据集并希望在WPF-Contorl中显示包含的行。问题是,控制是一种电路图。因此,我创建了一个模板来显示值,并在电路控制中放置了多个实例。目前电路中的XAML代码如下所示:从数据集中选择某一行

<Label Content="{Binding Path=.[0]}" ContentTemplate="{StaticResource ValueTpl}" /> 
<Label Content="{Binding Path=.[1]}" ContentTemplate="{StaticResource ValueTpl}" /> 

依此类推。所以我可以在指定的位置显示第n行。问题是,我不能指望正确的顺序了,我宁愿需要的是这样的:

<Label Content="{Binding Path=.[id=5]}" ContentTemplate="{StaticResource ValueTpl}" /> 
<Label Content="{Binding Path=.[id=8]}" ContentTemplate="{StaticResource ValueTpl}" /> 

我读到的XPath应该得到支持,但我不能得到这个工作。

回答

0

如果键入XPath代替Path它支持...

0

是的,我需要使用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),也许这就是原因。

+0

好的,它停止崩溃,如果我设置'模式'为'OneTime', 虽然这不是我所需要的... – Mene 2010-01-07 17:40:38