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