2011-01-20 71 views
1

在下面的示例中,WPF會忽略DataTemplate。爲什麼XML DataTemplates被忽略?

這是爲什麼?

<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

這是一個很好的問題;我不知道爲什麼它被低估。 – 2011-01-20 21:17:24

回答

1

我相信這個問題是與結合,而不是模板選擇。

如果你看一下Binding.XPath的文件,你會看到,當綁定的源是XML數據(即XmlDocumentXmlNode)的XPath屬性使用,而不是Path財產,找上了財產數據源。

我懷疑這裏發生的是Binding沒有返回XmlDocument。綁定看到源對象是一個XmlDocument,並且它調用SelectNodes,將XPath屬性的值作爲參數傳入。這是空(或可能是一個空字符串),所以SelectNodes不會返回任何內容。

+0

這是不正確的,你可以檢查屬性,它確實是整個XmlDocument,看到我的答案。 – 2011-12-02 07:53:43

0

DataTemplates有一個特殊的功能來處理XML,如果XML數據的DataType被解釋爲XML元素的名稱應該是模板:

如果該模板用於對象數據,此屬性包含數據對象的類型名稱(以字符串形式)。要引用類的類型名稱,請使用x:Type Markup Extension。如果模板用於XML數據,則此屬性包含XML元素名稱。有關爲XML元素指定非默認名稱空間的詳細信息,請參閱文檔備註。