WPF, Xml namespace and XmlDataProvider
I was playing with the XmlDataProvider in WPF and I wanted to bind the content of inline XML from that provider to a ComboBox.
So, with I wrote this little piece of code :
<XmlDataProvider x:Key="ops" XPath="/operations/op"> <x:XData> <operations> <op>A</op> <op>B</op> <op>C</op> </operations> </x:XData></XmlDataProvider>[...]<ComboBox ItemsSource="{Binding Source={StaticResource ops}}" />
Turns out that the combobox does not display anything, even though the XPath for the XmlDataProvider is correct and the ItemSource binding as well.
In reality, the problem is not in the binding but rather in the XPath, where the XML "operations" node in the inline xml inherits from the System.Windows XML namespace, which renders the XPath "/operations/op" ineffective. In that case, the XPath expression selects nodes from the "" (empty) namespace.
I just needed to write this instead :
<XmlDataProvider x:Key="ops" XPath="/operations/op"> <x:XData> <operations xmlns="">
to reset the namespace used for that node, and my ComboBox was filled !
As a side note on WPF, I am just wondering on how this technology will be adopted. Many concepts are fairly innovative and differ from the usual concepts found in Winforms or even MFC.
I'm convinced that it is definitely going in the right direction with the data and design separation, but I'm not sure on how beginners are going to apprehend all this. Maybe a new release of Cider is going to ease development with this technology...Wait and see.
Meanwhile, I'm continuing to enjoy the fact that I can databind a TreeView very easily :)