在下面的示例中,WPF忽略了DataTemplate。
为什么会这样?
<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>
答案 0 :(得分:1)
我认为问题在于绑定,而不是模板选择。
如果查看Binding.XPath
的文档,您会看到当绑定源是XML数据(即XmlDocument
或XmlNode
)XPath
属性时使用而不是Path
属性来查找数据源上的属性。
我怀疑这里发生的事情是Binding
没有返回XmlDocument
。绑定看到源对象是XmlDocument
,并在其上调用SelectNodes
,将XPath
属性的值作为参数传递。那是空的(或者可能是一个空字符串),因此SelectNodes
不会返回任何内容。
答案 1 :(得分:0)
DataTemplates
具有处理XML的特殊功能,如果存在XML数据,则DataType
被解释为应该模板化的XML元素的名称:
如果模板用于对象数据,则此属性包含数据对象的类型名称(作为字符串)。要引用类的类型名称,请使用x:Type标记扩展。如果模板用于XML数据,则此属性包含XML元素名称。有关为XML元素指定非默认命名空间的详细信息,请参阅文档备注。