Wpf 为什么XML数据模板被忽略?

Wpf 为什么XML数据模板被忽略?,wpf,xml,data-binding,Wpf,Xml,Data Binding,在下面的示例中,数据模板被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=

在下面的示例中,数据模板被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>

你好

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

如果查看
Binding.XPath
的文档,您将看到当绑定源是XML数据(即
XmlDocument
XmlNode
)时,将使用
XPath
属性而不是
路径
属性来查找数据源上的属性


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

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

如果查看
Binding.XPath
的文档,您将看到当绑定源是XML数据(即
XmlDocument
XmlNode
)时,将使用
XPath
属性而不是
路径
属性来查找数据源上的属性


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

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

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


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

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


这是一个好问题;我不知道为什么它被否决了。这是一个好问题;我不知道为什么它被否决了。这是不正确的,你可以检查属性,它确实是整个XmlDocument,看我的答案。这是不正确的,你可以检查属性,它确实是整个XmlDocument,看我的答案。