2012-12-26 216 views
0

我想显示所有组名(contact_grname)到我的组合框中,但只有一个项目显示! 这是为什么?!wpf combobox数据绑定xml

<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> 

只需1组被显示出来(一次)。 当我在组合框中使用,而不是收看电视静态资源的远程数据,那么所有的组名显示(但也有双打值,因为没有分组那样)在组合框中

预期输出:

  • 1组
  • 组2

现在我有(与收看电视):

  • 1组

,如果我使用远程数据:

  • 1组
  • 1组
  • 组2
+0

尝试使用'/'代替OT'_':<组合框的ItemsSource = “{绑定源= {StaticResource的电传数据},的XPath =”/接触/名称}”> – Ramin

+0

不是这个问题,当我在这里写下来时输入错误,我改变了它 – keno

+0

contact_grname I ment :-) – keno

回答

0

如果你只是想显示Groups你其实可以通过ItemSource路径访问CollectionViewSource.View.Groups财产

<ComboBox ItemsSource="{Binding Source={StaticResource TeleView}, Path=Groups}" SelectedValuePath="Name" /> 

输出:

  • 组1
  • 组2
+0

感谢您的支持!像魅力一样工作!但是,当我使用combobox.SelectedValue.ToString(),它显示MS.Internal.Data.CollectionView ....而不是选定的字符串:/任何想法? SelectedItem.ToString()是相同的结果 – keno

+0

你将不得不添加'SelectedValuePath',所以你可以从'SelectedValue'得到正确的值,我已经更新了答案:) –

+0

非常感谢sa_ddam213:D工作完美!你能看看我的另一篇文章吗? http://stackoverflow.com/questions/14052468/wpf-filter-with-combox-xml谢谢! – keno

0

这不是回答你的问题,但它可能的帮助。考虑这个组合框:

<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">