1
我有以下XML(簡化示例),它應該在兩個ComboBox
之間具有父/子關係。父母綁定正確,但孩子不綁定父母SelectedItem
。如何綁定父/子ComboBox對XML數據源?
當我將xmlns
設置爲foobar
XML並刪除所有名稱空間引用時,它按預期工作。另外,如果我將ItemsSource="{Binding XPath=fb:foo/fb:bars/fb:bar}"
設置爲comboBar
,則它會從foo
元素中找到所有bar
節點。
實例(測試中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 [email protected]}" />
</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>