【发布时间】:2010-04-14 06:05:44
【问题描述】:
我有以下 XML(简化示例),它应该在两个 ComboBox 之间具有父/子关系。父级绑定正确但子级没有绑定到父级SelectedItem。
当我针对 foobar XML 设置 xmlns 并删除所有命名空间引用时,它按预期工作。此外,如果我将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 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>
【问题讨论】:
标签: wpf xml data-binding xaml xpath