System.Windows.Data Error: 47 : XmlDataProvider has inline XML that does not explicitly set its XmlNamespace (xmlns="").
다음과 같은 질문이 있었습니다.
바인딩 질문입니다.
; https://www.sysnet.pe.kr/3/0/1252
문제의 상황은 간단합니다. 사용자 정의 컨트롤이 있고,
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=name, Mode=TwoWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>
이를 XmlDataProvider와 연결시켜 사용하는 MainWindow.xaml 파일이 있습니다.
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UC="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<XmlDataProvider x:Key="vvv" XPath="/Datas/Data">
<x:XData>
<Datas>
<Data>
<name>aaaa1</name>
<values1>5</values1>
<values2>7</values2>
</Data>
</Datas>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<Grid>
<UC:UserControl1 DataContext="{Binding Source={StaticResource vvv}, Mode=Default}" />
</Grid>
</Window>
기대했던 동작이라면 XPath로 지정된 XML Element 컬렉션이 UserControl의 DataContext에 바인딩되어 ListBox 내 DataTemplate에 결과가 출력이 됩니다. 하지만, 실행해 보면 빈 화면만 나옵니다.
어디가 잘못된 것일까요? 저도 잘 몰랐습니다. ^^ 단지, WPF가 데이터 바인딩에 대한 오류를 꼭 보여준다는 것은 압니다. 실제로 Visual Studio의 디버그 창을 보면 다음과 같은 메시지를 볼 수 있습니다.
System.Windows.Data Error: 47 : XmlDataProvider has inline XML that does not explicitly set its XmlNamespace (xmlns="").
메시지 자체에도 답이 나오지만 검색해도 쉽게 알 수 있습니다. 그래서 다음과 같이 추가해 주면 동작이 정상적으로 됩니다.
<XmlDataProvider x:Key="vvv" XPath="/Datas/Data">
<x:XData>
<Datas xmlns="">
<Data>
<name>aaaa1</name>
<values1>5</values1>
<values2>7</values2>
</Data>
</Datas>
</x:XData>
</XmlDataProvider>
이렇게 오류 메시지만 잘 살펴도... 고칠 수 있는 문제가 많습니다. ^^
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]