首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含XmlDataProvider源代码的组DataGrid

包含XmlDataProvider源代码的组DataGrid
EN

Stack Overflow用户
提问于 2011-10-24 03:47:02
回答 1查看 2.2K关注 0票数 0

我有一台XmlDataProvider,一台ListBox和一台DataGrid。底层xml文件具有这种结构:

代码语言:javascript
复制
<Root>
  <Person name="test">
     <item name="bla" value="test"/>
     <item name="bla" value="test2"/>
  </Person>
<Root>

ListBox列出了所有人员,而DataGrid列出了与所选人员对应的所有项目。这可以达到预期的效果。现在,我想对DataGrid中的数据进行分组,但是看过示例之后,我仍然不知道如何使用XmlDataProvider进行分组(如何/在哪里通过XmlDataProvider创建ListCollectionView )。有人能给我一个快速的xaml示例吗?例如,按名称对项目进行分组?:)提前感谢您的帮助:)

问候

更新:现在分组可以工作了,但是当我向xml中添加一些东西时,它不再立即显示(在列表框或数据网格中).What是错误的吗?我真的是wpf的新手,所以可能有一些多余或不必要的东西,我对你指出它们没有任何问题:)这里是使用的相关代码:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-24 07:52:46

下面是一个例子,应该是不言自明的,但如果有什么不清楚的地方,请随时询问:

代码语言:javascript
复制
  <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>

(您也可以在ListBox上将设置为true,然后通过当前项绑定Source (即{Binding /, Source={StaticResource data}}__) )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7868706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档