0

XmlDataProvider、ListBox、および DataGrid があります。基になる xml ファイルには、次のような構造があります。

<Root>
  <Person name="test">
     <item name="bla" value="test"/>
     <item name="bla" value="test2"/>
  </Person>
<Root>

ListBox にはすべての人がリストされ、DataGrid には選択された Person に対応するすべての項目がリストされます。これは意図したとおりに機能します。今、私は DataGrid でデータをグループ化したいのですが、例を見ても、XmlDataProvider でそれを行う方法がわかりません (XmlDataProvider から ListCollectionView を作成する方法/場所)。たとえば、アイテムを名前でグループ化することで、これを行うための簡単なxamlの例を教えてください:)事前に助けてくれてありがとう:)

よろしく

更新: グループ化が機能するようになりましたが、xml に何かを追加すると、(リストボックスまたはデータグリッドで) すぐに表示されなくなります。何が問題なのですか? 私はwpfに本当に慣れていないので、冗長または不必要なものがあるかもしれません。あなたがそれらを指摘しても問題ありません:)使用される関連コードは次のとおりです。

<Grid.DataContext>
            <XmlDataProvider x:Name="XmlData" Source="entries.xml" XPath="Root/Person" />
</Grid.DataContext>

<ListBox Name="PersonListBox"
                ItemsSource="{Binding}"
                ItemTemplate="{StaticResource listBoxTemplate}"
                IsSynchronizedWithCurrentItem="True"
                Visibility="Visible" SelectionMode="Single"  SelectedIndex="-1" DataContext="{Binding}">
            </ListBox>

<DataGrid IsSynchronizedWithCurrentItem="True" Name="itemGrid"
                      DataContext="{Binding ElementName=PersonListBox, Path=SelectedItem}" 
                      CanUserAddRows="true"
                      IsReadOnly="true"
                      AutoGenerateColumns="False">
                <DataGrid.Resources>
                    <CollectionViewSource x:Key="items" Source="{Binding XPath=item}">
                        <CollectionViewSource.GroupDescriptions>
                            <PropertyGroupDescription PropertyName="@name"/> 
                        </CollectionViewSource.GroupDescriptions>
                    </CollectionViewSource>
                </DataGrid.Resources>
                <DataGrid.ItemsSource>
                    <Binding Source="{StaticResource items}"/>
                </DataGrid.ItemsSource>
                <DataGrid.Columns>
                    <DataGridTextColumn Width="*" Header="Name" Binding="{Binding XPath=@name}"/>
                    <DataGridTextColumn Header="Wert" Binding="{Binding XPath=@value}"/>
                </DataGrid.Columns>
                <DataGrid.GroupStyle>
                    <GroupStyle />
                </DataGrid.GroupStyle>
            </DataGrid>
4

1 に答える 1

1

ここに例があります、かなり自明であるはずです、しかし何かがはっきりしないならば、遠慮なく尋ねてください:

  <DataGrid>
    <DataGrid.Resources>
        <CollectionViewSource x:Key="items" Source="{Binding SelectedItem, ElementName=lb}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="@name"/>
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    </DataGrid.Resources>
    <DataGrid.ItemsSource>
        <Binding Source="{StaticResource items}"/>
    </DataGrid.ItemsSource>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding XPath=@value}"/>
    </DataGrid.Columns>
    <DataGrid.GroupStyle>
        <GroupStyle />
    </DataGrid.GroupStyle>
  </DataGrid>

(に設定IsSynchronizedWithCurrentItemtrueて、代わりに現在のアイテムを介してListBoxバインドすることもできSourceます(つまり{Binding /, Source={StaticResource data}}

于 2011-10-23T23:52:45.530 に答える