Почему XML DataTemplates игнорируются? - PullRequest
1 голос
/ 20 января 2011

В следующем примере WPT игнорирует шаблон данных.

Почему это так?

<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 ]

1 голос
/ 21 января 2011

Я считаю, что проблема связана с привязкой, а не с выбором шаблона.

Если вы посмотрите документацию для Binding.XPath, вы увидите, что когда источником привязки являются данные XML (т.е. XmlDocument или XmlNode), используется свойство XPath, а не Path свойство, чтобы найти свойство в источнике данных.

Я подозреваю, что здесь происходит то, что Binding не возвращает XmlDocument. Привязка видит, что исходный объект является XmlDocument, и вызывает для него SelectNodes, передавая значение свойства XPath в качестве аргумента. Это ноль (или, возможно, пустая строка), и поэтому SelectNodes ничего не возвращает.

0 голосов
/ 02 декабря 2011

DataTemplates имеет специальные функции для работы с XML, если есть XML-данные, DataType интерпретируется как имя XML-элемента, который должен быть шаблонизирован:

Если шаблон предназначен для данных объекта, это свойство содержит имя типа объекта данных (в виде строки). Чтобы сослаться на имя типа класса, используйте расширение разметки x: Type. Если шаблон предназначен для данных XML, это свойство содержит имя элемента XML. См. Примечания к документации для получения подробной информации об указании пространства имен не по умолчанию для элемента XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...