【发布时间】:2010-10-31 14:52:54
【问题描述】:
我刚刚开始使用 Linq、WPF 和 Silverlight。我正在尝试在 DataGrid 中显示源自 XML 文档的数据。我使用 Linq 查询来选择我想要的对象并将结果链接到 DataGrid。
XDocument doc = GedView.GedcomConverter.ConvertToXml(new StreamReader(e.Result));
var query = from person in doc.Descendants("INDI")
select new PersonInfo()
{
Id = (string)person.Attribute("Value"),
GedcomName = (string)person.Descendants("NAME").SingleOrDefault().Attribute("Value"),
Sex = (string)person.Descendants("SEX").SingleOrDefault().Attribute("Value"),
BirthDate = GedcomConverter.ConvertDate(person.Descendants("BIRT").SingleOrDefault()),
DeathDate = GedcomConverter.ConvertDate(person.Descendants("DEAT").SingleOrDefault()),
BurialDate = GedcomConverter.ConvertDate(person.Descendants("BURI").SingleOrDefault()),
};
DataGrid.ItemsSource = query;
DataGrid.SelectedIndex = -1;
但是,当网格滚动时,性能很差。我注意到 ConvertDate 方法被调用了很多次。 (ConvertDate 方法将人类可读的日期字符串转换为 DateTime? 对象。)
这是为什么?我曾假设“查询”将执行一次而不是连续执行。
这样做的正确方法是什么?我正在使用查询,因为我想在以后添加某种过滤器来限制列表中的项目。
谢谢
【问题讨论】:
标签: linq silverlight performance datagrid