3
我剛開始使用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對象。)
這是爲什麼?我曾假設'查詢'會執行一次而不是連續執行。
什麼是正確的方法來做到這一點?我正在使用查詢,因爲我希望添加某種過濾器來限制日後列表中的項目。
感謝
太棒了!這樣可行。謝謝 – paul 2009-06-05 11:39:52