Я только начинаю работать с Linq, WPF и Silverlight. Я пытаюсь отобразить данные, которые происходят из XML-документа в DataGrid. Я использую запрос 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?).
Почему это? Я предполагал, что «запрос» будет выполнен один раз, а не непрерывно.
Каков был бы правильный способ сделать это? Я использую запрос, потому что я хочу добавить какой-то фильтр, чтобы ограничить элементы в списке позже.
Спасибо