저는 Linq, WPF 및 Silverlight를 시작했습니다. DataGrid의 XML 문서에서 가져온 데이터를 표시하려고합니다. 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? 개체로 변환합니다.)
왜 그런가요? 나는 '쿼리'가 한 번만 실행되고 연속적으로 실행되지 않는다고 가정했다.
이 작업을 수행하는 올바른 방법은 무엇입니까? 나중에 목록의 항목을 제한하는 일종의 필터를 추가하려고하기 때문에 쿼리를 사용하고 있습니다.
Brilliant! 그거야. 감사 – paul