私は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