【问题标题】:Group DataGrid with XmlDataProvider source使用 XmlDataProvider 源对 DataGrid 进行分组
【发布时间】:2011-10-24 17:52:19
【问题描述】:

我有一个 XmlDataProvider、一个 ListBox 和一个 DataGrid。 底层的xml文件有这样的结构:

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

ListBox 列出所有人员,而 DataGrid 列出所有项目,对应于选定的人员。这按预期工作。 现在我想对 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>

【问题讨论】:

    标签: wpf xaml datagrid xmldataprovider


    【解决方案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>
    

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

    【讨论】:

    • 非常感谢,就像一个魅力 :) 我真的开始喜欢 wpf ^^
    • 好吧,这太快了,现在 xml 中的更改不会立即显示,但只有当我重新加载它时,才会更新问题 :)
    • 好吧对不起,没关系。我将 CollectionViewSource 的源更改为 {Binding XPath=item},现在它可以工作了 :) 再次感谢
    • @ch40s:很高兴听到这个消息,如果现在您的问题得到充分回答,您可以accept我的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2010-10-21
    相关资源
    最近更新 更多