У меня есть следующий XML (упрощенный пример), который должен иметь отношения родитель / потомок между двумя ComboBox
. Родитель связывает правильно, но ребенок не связывает с родителями SelectedItem
.
Когда я устанавливаю xmlns
против foobar
XML и удаляю все ссылки на пространства имен, он работает как положено. Также, если я установлю ItemsSource="{Binding XPath=fb:foo/fb:bars/fb:bar}"
против comboBar
, он найдет все узлы bar
, как и ожидалось от обоих foo
элементов.
ПРИМЕР (протестирован для работы в XamlPad)
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<XmlDataProvider x:Key="foobarSource" XPath="fb:foobar">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping
Prefix="fb" Uri="http://foo.bar/1.0/foobar.xsd"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
<x:XData>
<foobar xmlns="http://foo.bar/1.0/foobar.xsd">
<foo name="Foo 1">
<bars name='bars 1'>
<bar name="first"/>
<bar name="second"/>
</bars>
</foo>
<foo name="Foo 2">
<bars name='bars 2'>
<bar name="third"/>
<bar name="fourth"/>
</bars>
</foo>
</foobar>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="comboTemplate">
<TextBlock Text="{Binding XPath=@name}" />
</DataTemplate>
</Page.Resources>
<StackPanel DataContext="{StaticResource foobarSource}">
<ComboBox Width="150" x:Name="comboFoo"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding XPath=fb:foo}"
ItemTemplate="{StaticResource comboTemplate}"/>
<ComboBox Width="150" x:Name="comboBar"
IsSynchronizedWithCurrentItem="True"
DataContext="{Binding SelectedItem, ElementName=comboFoo}"
ItemsSource="{Binding XPath=fb:bars/fb:bar}"
ItemTemplate="{StaticResource comboTemplate}"/>
</StackPanel>
</Page>