2011-10-23 27 views
0

我有一个XmlDataProvider,一个ListBox和一个DataGrid。 底层的XML文件中有这样的结构:使用XmlDataProvider编组DataGrid源代码

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

列表框列出了所有的人,而DataGrid中列出的所有项目,相应的被选择的人。这按预期工作。 现在我想分组DataGrid中的数据,但看看例子我仍然没有得到如何用XmlDataProvider(如何/在哪里创建一个ListCollectionView关闭的XmlDataProvider)做到这一点。 可能有人请给我一个快速的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 [email protected]}"/> 
        <DataGridTextColumn Header="Wert" Binding="{Binding [email protected]}"/> 
       </DataGrid.Columns> 
       <DataGrid.GroupStyle> 
        <GroupStyle /> 
       </DataGrid.GroupStyle> 
      </DataGrid> 

回答

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 [email protected]}"/> 
    </DataGrid.Columns> 
    <DataGrid.GroupStyle> 
     <GroupStyle /> 
    </DataGrid.GroupStyle> 
    </DataGrid> 

(您还可以设置IsSynchronizedWithCurrentItemtrueListBox,然后通过当前项目绑定Source代替(即{Binding /, Source={StaticResource data}}

+0

感谢了很多,就像一个魅力:)我真的开始爱上WPF ^^ – ch40s

+0

OK,这是太快了,现在改变XML不会立即显示,但只有当我重新加载,更新的问题:) – ch40s

+0

OK谢幕,没关系。我将CollectionViewSource的Source改为{Binding XPath = item},现在它工作:)再次感谢 – ch40s