问题描述
在下面的示例中,WPF忽略了DataTemplate。
In the following sample, the DataTemplate is ignored by WPF.
为什么是这样?
<Window x:Class="TestXmlNonBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Xml="clr-namespace:System.Xml;assembly=System.Xml">
<Window.Resources>
<DataTemplate DataType="{x:Type Xml:XmlDocument}">
<TextBlock>Hello</TextBlock>
</DataTemplate>
</Window.Resources>
<Window.DataContext>
<Xml:XmlDocument></Xml:XmlDocument>
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding}"></ContentControl>
</Grid>
推荐答案
我认为问题是绑定,而不是模板选择。
I believe the issue is with binding, not template selection.
如果您查看 Binding.XPath
的文档,则会发现绑定源是XML数据(即 XmlDocument
或 XmlNode
) XPath
属性被使用,而不是 Path
属性来查找数据源上的属性。
If you look at the documentation for Binding.XPath
, you'll see that when the binding source is XML data (i.e. an XmlDocument
or XmlNode
) the XPath
property is used, rather than the Path
property, to find the property on the data source.
我怀疑这里发生的是 Binding
不会返回一个 XmlDocument
。绑定会看到源对象是一个 XmlDocument
,它调用了 SelectNodes
,传递给 XPath
属性作为参数。这是null(或者可能是空字符串),因此 SelectNodes
不返回任何内容。
I suspect that what's happening here is that the Binding
is not returning an XmlDocument
. The binding sees that the source object is an XmlDocument
, and it calls SelectNodes
on it, passing in the value of the XPath
property as an argument. That's null (or maybe an empty string), and so SelectNodes
doesn't return anything.
这篇关于为什么忽略XML DataTemplates?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!