기본값 인을 XmlDataProvider 및 XPath 바인딩과 함께 사용하는 방법을 알아 내려고 노력하고 있습니다.XmlDataProvider 및 XPath 바인딩에서 XML 데이터의 기본 네임 스페이스를 허용하지 않습니까?
로컬 이름이 <Binding XPath="*[local-name()='Name']" />
인 ugly answer이 있지만이 XAML을 고도로 유지 관리하기를 원하는 클라이언트는 받아 들일 수 없습니다.
대체로 보고서 XML에서 기본이 아닌 네임 스페이스를 사용하도록 강제하는 것이 바람직하지 않은 해결책입니다.
XML 보고서 파일은 다음과 같습니다. 기본 네임 스페이스가 없도록 xmlns="http://www.acme.com/xml/schemas/report
을 제거한 경우에만 작동합니다. 내가 XAML과 창에 제시하고
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='PreviewReportImages.xsl'?>
<Report xsl:schemaLocation="http://www.acme.com/xml/schemas/report BlahReport.xsd" xmlns:xsl="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.acme.com/xml/schemas/report">
<Service>Muncher</Service>
<Analysis>
<Date>27 Apr 2010</Date>
<Time>0:09</Time>
<Authoriser>Service Centre Manager</Authoriser>
는 :
코드 뒤에 XmlDataProvider (에 XmlDocument를로드하는 데 사용과
<Window x:Class="AcmeTest.ReportPreview"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ReportPreview" Height="300" Width="300" >
<Window.Resources>
<XmlDataProvider x:Key="Data"/>
</Window.Resources>
<StackPanel Orientation="Vertical" DataContext="{Binding Source={StaticResource Data}, XPath=Report}">
<TextBlock Text="{Binding XPath=Service}"/>
</StackPanel>
</Window>
는 파일의 로딩을하거나 다양한 개체 수있는 유일한 방법을 보인다 런타임시). 내가 때 단지 명백한 (기본 네임 스페이스와 같은 URI에 매핑 내 XPath 식에 접두사를 사용, 클라이언트 XML 데이터에 접두사를 추가 할 필요가 없습니다 실현하지 않았다
public partial class ReportPreview : Window
{
private void InitXmlProvider(XmlDocument doc)
{
XmlDataProvider xd = (XmlDataProvider)Resources["Data"];
xd.Document = doc;
}
public ReportPreview(XmlDocument doc)
{
InitializeComponent();
InitXmlProvider(doc);
}
public ReportPreview(String reportPath)
{
InitializeComponent();
var doc = new XmlDocument();
doc.Load(reportPath);
InitXmlProvider(doc);
}
}
테스트하지 않으면 바인딩의 일부로 XmlNamespaceManager를 사용할 수 있어야합니다. 접두사를 사용해야하지만 작동해야합니다. – p00ya
그래, 접두사를 강제로 내 fallback이지만 많은 XSLT 외부 스크립트는 기본 네임 스페이스에 만족해야 변경해야합니다. –
doh - 아래 내 대답을 참조하십시오! –