2012-01-10 22 views
2

私は多くのUserControlオブジェクトを表示したり非表示にするWPFアプリケーションを用意しています。 XAMLコードは次のようになります。UserControlオブジェクトのキャッシュ

<ItemsControl ItemsSource="{Binding Path=MyListOfStuff}" > 
    <Controls:MyControl Stuff="{Binding}"/> 
</ItemsControl> 

これらのオブジェクトの作成には多くの時間がかかります。プロファイリングでは、MyControlオブジェクトには「InitializeComponent」にかなりの時間がかかります。私はその時間を短縮するためにこれらのオブジェクトをあらかじめ作成したいと思っています。どうやってやるの?私はまだxamlコードが必要で、すべてを単なるコードに置き換えたくない。

リスト内の項目がビューよりも大きいことがあるため、CanContentScrollがFalseである必要があるため、仮想化を使用することはできません。

+3

これを見てください:http://stackoverflow.com/questions/2783845/wpf-virtualizing-an-itemscontrolスクロールしていないと表示しているので仮想化があなたのケースで役立つかどうかはわかりませんが。 – Ray

+0

CachingItemsControlの実装については、http://stackoverflow.com/questions/22218506/wpf-canvas-based-itemscontrol-with-minimum-recycled-items/22220980#comment33743843_22220980をご覧ください。 –

答えて

2

問題を解決するには2つの側面があります。でもあなたは、.NETを使用している場合も

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2009/10/01/ui-virtualization-vs-data-virtualization-part-2.aspx

を見ている必要があり

  1. UIの仮想化
  2. データ仮想化

...それらの両方を使用することができます4.0では、Lazyクラスを使用してデータ仮想化を簡単にサポートできます。それ以外の場合は、サポートするクラスをいくつか作成する必要があります。

よろしくお願いいたします。

1

WPFでUIキャッシングを行うことは可能ですが、あなたが探しているものではないと確信しています。

ビットマップキャッシュは、1回のビジュアルが複数回描画される場合に便利です。したがって、ビジュアルキャッシュは1回だけレンダリングされ、その後のレンダリングではキャッシュからのみコピーされます。

仮想化を検討する必要があります(Shoaibの回答を参照)。

Article about bitmap caching

関連する問題