为什么忽略XML DataTemplates?

时间:2011-01-20 12:29:19

标签: wpf xml data-binding

在下面的示例中,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>

2 个答案:

答案 0 :(得分:1)

我认为问题在于绑定,而不是模板选择。

如果查看Binding.XPath的文档,您会看到当绑定源是XML数据(即XmlDocumentXmlNodeXPath属性时使用而不是Path属性来查找数据源上的属性。

我怀疑这里发生的事情是Binding没有返回XmlDocument。绑定看到源对象是XmlDocument,并在其上调用SelectNodes,将XPath属性的值作为参数传递。那是空的(或者可能是一个空字符串),因此SelectNodes不会返回任何内容。

答案 1 :(得分:0)

DataTemplates具有处理XML的特殊功能,如果存在XML数据,则DataType被解释为应该模板化的XML元素的名称:

  

如果模板用于对象数据,则此属性包含数据对象的类型名称(作为字符串)。要引用类的类型名称,请使用x:Type标记扩展。如果模板用于XML数据,则此属性包含XML元素名称。有关为XML元素指定非默认命名空间的详细信息,请参阅文档备注。