我正在尝试将XML中的所有数据设置为数据网格。这是我的xaml代码:
<datagrid x:name="dataGrid" horizontalalignment="Left"
autogeneratecolumns="False" height="271"
margin="10,10,0,0" verticalalignment="Top" width="491">
IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="NAME"
Binding="{Binding NAME}" />
<DataGridTextColumn Header="UNIT"
Binding="{Binding UNIT}" />
<DataGridTextColumn Header="CURRENCYCODE"
Binding="{Binding CURRENCYCODE}" />
<DataGridTextColumn Header="COUNTRY"
Binding="{Binding COUNTRY}" />
<DataGridTextColumn Header="RATE"
Binding="{Binding RATE}" />
<DataGridTextColumn Header="CHANGE"
Binding="{Binding CHANGE}" />
</DataGrid.Columns>
</datagrid>
我尝试使用以下代码将所有数据放入网格中:
private void setData()
{
var doc = XDocument.Load("https://forex.boi.org.il/currency.xml");
var data = doc.Root.Elements("CURRENCY");
List information = new List();
foreach (var code in data)
{
var nameV = code.Element("NAME").Value;
var unitV = code.Element("UNIT").Value;
var currencyCodeV = code.Element("CURRENCYCODE").Value;
var currencyV = code.Element("COUNTRY").Value;
var rateV = code.Element("RATE").Value;
var changeV = code.Element("CHANGE").Value;
Info row = new Info(nameV, unitV, currencyCodeV, currencyV,
rateV, changeV);
information.SetValue(row);
}
dataGrid.ItemsSource = information;t unsecsses
}
在这一行information.SetValue(row);
中,我尝试将INFO类设置到列表中。我看到有一个选项可以编写将xml转换为LIST的内容,它非常简单但现在可以正常工作。
我试试这个:data.ToList();但我不知道怎么做..帮助..
答案 0 :(得分:1)
我假设你的类'公共属性和绑定匹配(Info
类具有绑定语句中提到的所有属性)。然后,您可以尝试使用IEnumerable<Info>
或List<Info>
作为ItemsSource
:
.....
IEnumerable<Info> information = doc.Root
.Elements("CURRENCY")
.Select(o => new Info
(
(string)o.Element("NAME"),
(string)o.Element("UNIT"),
(string)o.Element("CURRENCYCODE"),
(string)o.Element("COUNTRY"),
(string)o.Element("RATE"),
(string)o.Element("CHANGE")
));
dataGrid.ItemsSource = information;
答案 1 :(得分:0)
您的SetData
方法应如下所示:
private void setData()
{
var doc = XDocument.Load("https://forex.boi.org.il/currency.xml" );
IEnumerable<Info> information = doc.Descendants("CURRENCY").Select(x => new Info()
{
nameV = x.Element("NAME").Value,
unitV = x.Element("UNIT").Value,
//etc...
});
dataGrid.ItemsSource = information;
}
在您的尝试中,您遇到以下问题:
它应该是List<Info> information = new List<Info>();
和information.Add(row);
。
不要忘记修改您的XAML,以便列的绑定与Info
类(nameV
类(currencyV
,Binding="{Binding nameV}"
等)中的属性名称相对应,因此您将拥有它像这样:{{1}}