将xml文件分组到datagrid中
我想将我的xml绑定数据网格分组 这是我从互联网上得到的代码,我一直在工作! 但我需要在这里绑定XML文件,而不是将DataContext绑定到列表(addressList)。。。 我该怎么做将xml文件分组到datagrid中,xml,wpf,datagrid,Xml,Wpf,Datagrid,我想将我的xml绑定数据网格分组 这是我从互联网上得到的代码,我一直在工作! 但我需要在这里绑定XML文件,而不是将DataContext绑定到列表(addressList)。。。 我该怎么做 addressList = new ObservableCollection<Address>(){ <== this is an example ! But I've got a XML file ?! Howto ? new Address
addressList = new ObservableCollection<Address>(){ <== this is an example ! But I've got a XML file ?! Howto ?
new Address{ Country="Argentina", City="Buenos Aires", Street="Ldiary"},
new Address{ Country="Argentina", City="Buenos Aires", Street="Translations"},
new Address{ Country="Austria", City="Graz", Street="Ldiary Translations"},
new Address{ Country="Austria", City="Salzburg", Street="Ldiary"},
new Address{ Country="Belgium", City="Bruxelles", Street="Translations"},
new Address{ Country="Belgium", City="Charleroi", Street="Ldiary Translations"},
new Address{ Country="Brazil", City="Campinas", Street="Japanese"},
new Address{ Country="Brazil", City="Resende", Street="English"},
new Address{ Country="Brazil", City="Rio de Janeiro", Street="Ldiary Translations"},
new Address{ Country="Canada", City="Montreal", Street="Ldiary Translations"},
new Address{ Country="Canada", City="Montreal", Street="Ldiary Translations"},
new Address{ Country="Denmark", City="Arhus", Street="English to Japanese"},
new Address{ Country="Denmark", City="Kobenhavn", Street="Ldiary Translations"},
new Address{ Country="Finland", City="Helsinki", Street="Ldiary Translations"},
new Address{ Country="Finland", City="Oulu", Street="Ldiary Translations"},
new Address{ Country="France", City="Lille", Street="Ldiary Translations"},
new Address{ Country="France", City="Lyon", Street="Ldiary Translations"},
new Address{ Country="France", City="Marseille", Street="Ldiary Translations"},
new Address{ Country="France", City="Nantes", Street="English"},
new Address{ Country="Germany", City="Aachen", Street="Japanese"},
new Address{ Country="Germany", City="Berlin", Street="Ldiary Translations"}
};
this.DataContext = addressList; <= Not
CollectionView cv = CollectionViewSource.GetDefaultView(dataGrid.DataContext) as CollectionView;
cv.GroupDescriptions.Add(new PropertyGroupDescription("Country"));
我的xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<response>
<conv>
<sms><recipient>test</recipient><datetime/><message/></sms>
<sms>
<msgid>123456</msgid>
<datetime>15-12-2012 21:36:55</datetime>
<message>test</message>
</sms>
</conv>
</response>
测试
123456
15-12-2012 21:36:55
测试
您可以直接在Xaml中绑定XML数据
例如:
从窗口或控件资源中的文件创建xml源
<Window.Resources>
<XmlDataProvider x:Key="AddressXML" XPath="/Address" Source="C:\AddressData.xml" />
</Window.Resources>
然后可以将文档中的元素/节点绑定到DataGrid或其他控件
<Grid>
<DataGrid DataContext="{StaticResource AddressXML}" ItemsSource="{Binding XPath=Address}" />
</Grid>
如果你发布一个xml文件的例子,我可以给你一个更好的解释
xaml中的CollectionViewSource
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
<Window.Resources>
<XmlDataProvider x:Key="SmsData" XPath="/response" Source="C:\data.xml"/>
<CollectionViewSource x:Key="SmsView" Source="{StaticResource SmsData}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="datetime" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="msgid" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<DataGrid DataContext="{StaticResource SmsView}" ItemsSource="{Binding XPath=conv/sms}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=msgid}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=imsgid}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=recipient}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=datetime}" Width="120" />
<DataGridTextColumn Binding="{Binding XPath=message}" Width="225" />
</DataGrid.Columns>
</DataGrid>
</Grid>
xmlns:scm=“clr命名空间:System.ComponentModel;assembly=WindowsBase”
xmlns:dat=“clr命名空间:System.Windows.Data;assembly=PresentationFramework”
是否尝试过使用XDocument或XmlDocument解析XML文件,然后通过元素循环到可观察集合中?您不需要绑定XML文件,您需要绑定XML文件中的数据。。那么您想从代码隐藏中将ObservableCollection绑定到DataGrid?或者只是对数据进行分组?只是基于xml绑定文件对我的DataGrid中的数据进行分组。。。但我发现实现这一点的唯一方法是使用ObservableCollection(就像我的beginpost中的第一个代码),您想在xaml中完成这一切吗?address=smsdata吗?是的,就像我文章中的第一个代码(也包括xaml)。地址=smsdata?否与彼此无关。好吧,如果我理解正确,您只需要xaml中的collectionviewsource,而“地址”数据不在任何地方使用?
<Grid>
<DataGrid DataContext="{StaticResource AddressXML}" ItemsSource="{Binding XPath=Address}" />
</Grid>
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:dat="clr-namespace:System.Windows.Data;assembly=PresentationFramework"
<Window.Resources>
<XmlDataProvider x:Key="SmsData" XPath="/response" Source="C:\data.xml"/>
<CollectionViewSource x:Key="SmsView" Source="{StaticResource SmsData}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="datetime" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<dat:PropertyGroupDescription PropertyName="msgid" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<Grid>
<DataGrid DataContext="{StaticResource SmsView}" ItemsSource="{Binding XPath=conv/sms}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding XPath=msgid}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=imsgid}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=recipient}" Width="100" />
<DataGridTextColumn Binding="{Binding XPath=datetime}" Width="120" />
<DataGridTextColumn Binding="{Binding XPath=message}" Width="225" />
</DataGrid.Columns>
</DataGrid>
</Grid>