このオープン ソース パッケージ ( http://objectlistview.sourceforge.net/cs/index.html )の TreeListView を使用しようとしています。私が取り組んだコードは TreeListView をうまく構築しますが、アイテムを描画するのが遅く、クリックすると遅くなります。
私のデータ モデルは、親ドキュメントと子 DocumentVersion で構成されています (以下の ProjectComponent クラスの理由である複合デザイン パターンを使用しています。各ドキュメントは任意の数の DocumentVersion を持つことができます。DocumentVersion は子を持つことはできません。これが私のクラスです (簡潔にするために、無関係なほとんどのコードを削除しました):
abstract public class ProjectComponent
{
public abstract bool HasChildren { get; }
public int ID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class Document : ProjectComponent
{
public virtual List<DocumentVersion> DocumentVersions { get; set; }
public override bool HasChildren
{
get { if (this.DocumentVersions.Count > 0) return true; else return false;}
}
}
public class DocumentVersion : ProjectComponent
{
public int VersionNo { get; set; }
public DocumentType Type { get; set; }
public string Filename { get; set; }
[ForeignKey("Document")]
public int DocumentID { get; set; }
public Document Document { get; set; }
public override bool HasChildren
{
get { return false; }
}
}
TreeListView を構築するには、リスト (CurrentDocumentList) 内のすべてのドキュメントをプルしてから、次のようにツリーを構築します。
void InitializeTV2(TreeListView tlv)
{
tlv.HideSelection = false;
tlv.CanExpandGetter = delegate(object x)
{
return ((ProjectComponent)x).HasChildren;
};
tlv.ChildrenGetter = delegate(object x) { return ((Document)x).DocumentVersions; };
tlv.Roots = CurrentDocumentList;
}
結果は正確な TreeListView になりますが、反応がよくありません (展開するときの描画が遅く、クリックするたびに遅くなります)。CanExpandGetter は頻繁にヒットしますが、ドキュメントによるとこれは正常な動作です。
これをより速くする方法について誰かが何かヒントを持っていれば、それを感謝します。(パッケージに付属の FileSystemInfo を使用するサンプル プロジェクトは、私のマシンで非常に高速に動作するため、明らかに私のコードです)。
ありがとう。