Я привязываю DataTemplates к XmlDataProvider. Поскольку рассматриваемые данные XML используют пространства имен, я также прикрепил XmlNamespaceManager к XmlDataProvider и сопоставил префикс с ним.
Когда привязка к XPath только начинается с корня XmlDataProvider, префикс пространства имен понимается очень хорошо, и я получаю результаты. Однако, если из DataTemplate я пытаюсь выполнить другую привязку на основе XPath, в окне «Вывод» отображается эта ошибка во время выполнения:
Не удалось получить коллекцию узлов результатов из-за неверного исходного узла или неверного пути .; SourceNode = 'IntegrationProfile'; Path = 'i: Role' BindingExpression: Path =; DataItem = 'XmlElement' (HashCode = 19883454); целевой элемент - TabControl (Name = '); Свойство target - «ItemsSource» (тип «IEnumerable»). XPathException: «System.Xml.XPath.XPathException: необходим менеджер пространства имен или XsltContext. Этот запрос имеет префикс, переменную или пользовательскую функцию.
Эта ошибка была вызвана этой строкой XAML:
<TabControl ItemsSource="{Binding XPath=i:Role}"/>
, который находится в шаблоне данных. NamespaceManager был прикреплен в коде, например так:
_profile = new XmlDataProvider();
_profile.Document = new XmlDocument();
_profile.Document.Load(ProfilePath);
_profile.XmlNamespaceManager = NamespaceManager;
WPF забывает, что к нему прикреплен NamespaceManager?