Wpf 如何使用属性元素语法指定绑定XPath?
我需要为Wpf 如何使用属性元素语法指定绑定XPath?,wpf,Wpf,我需要为HierarchycalDataTemplate的ItemsSource应用XPath绑定。当使用属性属性语法应用XPath绑定时,它工作正常,但是在一个例子中,我有很长的XPath表达式要使用,所以我想使用属性元素语法应用它 这就是使用属性语法的作用: <HierarchicalDataTemplate x:Key="rootTemplate" ItemsSource="{Binding XPath=./*}">
HierarchycalDataTemplate
的ItemsSource
应用XPath绑定。当使用属性属性语法应用XPath绑定时,它工作正常,但是在一个例子中,我有很长的XPath表达式要使用,所以我想使用属性元素语法应用它
这就是使用属性语法的作用:
<HierarchicalDataTemplate
x:Key="rootTemplate"
ItemsSource="{Binding XPath=./*}">
<StackPanel
Orientation="Horizontal"
VerticalAlignment="Center">
<TextBlock
Margin="5,0,0,0"
Text="{Binding Name}" />
<Image
Source="repeat.ico"
Margin="5 0 0 0"
Width="20"
Height="20"
Visibility="{Binding Converter={StaticResource RepeatToVisiblityConverter}}"></Image>
</StackPanel>
</HierarchicalDataTemplate>
这就是我在使用长XPath时使用Property元素语法试图为上面的同一模板实现的目标:[虽然我在这里使用了相同的XPath,但实际上它是长的]
<HierarchicalDataTemplate
x:Key="rootTemplate">
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.XPath>
<![CDATA[./*]]>
</Binding.XPath>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
<StackPanel
Orientation="Horizontal"
VerticalAlignment="Center">
<CheckBox
Margin="5,0,0,0" />
<TextBlock
Margin="5,0,0,0"
Text="{Binding Name}" />
</StackPanel>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
使用此语法指定绑定时,ItemsSource将变为空,并且不显示任何内容
有人知道如何修复此问题吗?以下代码有效:
它只是从上面删除了这两行:
<HierarchicalDataTemplate.ItemTemplate>
<DataTemplate>
我将在稍后了解,为什么删除此项有效
<HierarchicalDataTemplate
x:Key="rootTemplate">
<HierarchicalDataTemplate.ItemsSource>
<Binding>
<Binding.XPath>
./*[@Repeat="true" or .//*[@Repeat="true"]]
</Binding.XPath>
</Binding>
</HierarchicalDataTemplate.ItemsSource>
<StackPanel
Orientation="Horizontal"
VerticalAlignment="Center">
<CheckBox
Margin="5,0,0,0" />
<TextBlock
Margin="5,0,0,0"
Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
./*[@Repeat=“true”或./*[@Repeat=“true”]]
或者
怎么样?这也不起作用。即使这样,我有一个非常大的XPath表达式,如果用双引号写的话,它需要很多转义序列。