我想将所有组名(contact_grname)显示在我的组合框中,但只显示一个项目! 那是为什么?!
<XmlDataProvider x:Key="TeleData" XPath="/response/contacts/contact">
</XmlDataProvider>
<CollectionViewSource x:Key="TeleView" Source="{StaticResource TeleData}" >
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="contact_name" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="contact_grname" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<ComboBox ItemsSource="{Binding Source={StaticResource TeleView}, XPath=contact_grname}" />
我的xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<response>
<contacts>
<contact>
<contact_grname>group1</contact_grname>
<contact_name>Bart</contact_name>
</contact>
<contact>
<contact_grname>group1</contact_grname>
<contact_name>Eric</contact_name>
</contact>
<contact>
<contact_grname>group2</contact_grname>
<contact_name>Mike</contact_name>
</contact>
</contacts>
</response>
只有group1出现(一次)。 当我在组合框中使用StaticResource TeleData而不是TeleView时,则会显示所有组名(但是有两个值,因为没有按这种方式分组)
组合框中的预期输出:
现在我(使用TeleView):
如果我使用Teledata:
答案 0 :(得分:0)
这不是你问题的答案,但它可能有所帮助。考虑一下这个ComboBox:
<ComboBox SelectedIndex="1">
<ComboBox.Resources>
<XmlDataProvider x:Key="Data"
XPath="response/contacts">
<x:XData>
<response>
<contacts>
<contact>
<contact_grname>group1</contact_grname>
<contact_name>Bart</contact_name>
<contact_name>Eric</contact_name>
</contact>
<contact>
<contact_grname>group2</contact_grname>
<contact_name>Mike</contact_name>
</contact>
</contacts>
</response>
</x:XData>
</XmlDataProvider>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<Binding Source="{StaticResource Data}"
XPath="contact/contact_name" />
</ComboBox.ItemsSource>
</ComboBox>
显示“Bart”,“Eric”和“Mike”。有了这个绑定:
<Binding Source="{StaticResource Data}"
XPath="contact/contact_grname" />
您将获得“group1”,“group2”。但这是因为我改变了xml。使用你的xlm,我的意思是:
<contact>
<contact_grname>group1</contact_grname>
<contact_name>Bart</contact_name>
</contact>
<contact>
<contact_grname>group1</contact_grname>
<contact_name>Mike</contact_name>
</contact>
结果是“group1”,“group1”和“group2”。
因此,一个建议是从这行代码中删除/contact
:
<XmlDataProvider x:Key="TeleData" XPath="/response/contacts/contact">
答案 1 :(得分:0)
如果您只想显示Groups
,您可以通过CollectionViewSource.View.Groups
路径
ItemSource
媒体资源
<ComboBox ItemsSource="{Binding Source={StaticResource TeleView}, Path=Groups}" SelectedValuePath="Name" />
输出: