0

すべてのグループ名 (contact_grname) をコンボボックスに表示したいのですが、項目が 1 つしか表示されません! 何故ですか ?!

<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 だけが表示されます (1 回)。コンボボックスで TeleView の代わりに StaticResource TeleData を使用すると、すべてのグループ名が表示されます (ただし、そのようにグループ化されていないため、値が double になります)

コンボボックスで期待される出力:

  • グループ1
  • グループ2

今私は(TeleViewで)持っています:

  • グループ1

Teledata を使用する場合:

  • グループ1
  • グループ1
  • グループ2
4

2 に答える 2

0

を表示したいだけの場合は、パスを介してGroups実際にCollectionViewSource.View.GroupsプロパティにアクセスできますItemSource

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

出力:

  • グループ1
  • グループ2
于 2012-12-27T04:38:25.423 に答える
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>

「バート」、「エリック」、「マイク」が表示されます。このバインディングでは:

<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」です。

したがって、1 つの提案は/contact、このコード行から削除することです。

<XmlDataProvider x:Key="TeleData" XPath="/response/contacts/contact">
于 2012-12-26T12:19:06.993 に答える