2012-01-10 2 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 비록 당신이 보이지 않고 숨기고 있기 때문에 virualizing이 당신의 경우에 도움이 될지 모르겠지만 . – Ray

+0

CachingItemsControl 구현을 위해 http://stackoverflow.com/questions/22218506/wpf-canvas-based-itemscontrol-with-minimum-recycled-items/22220980#comment33743843_22220980을 살펴보십시오. –

답변

2

문제를 해결하는 데는 두 가지 측면이 있습니다. 심지어 당신은 ... 둘 다 사용할 수 있습니다

  1. UI 가상화
  2. 당신은 그물을 사용하고 또한 경우

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

    살펴해야

데이터 가상화 4.0 Lazy 클래스를 사용하면 데이터 가상화를 쉽게 지원할 수 있습니다. 그렇지 않으면이를 지원하는 클래스를 만들어야합니다.

감사합니다.

1

WPF에서 UI 캐싱을 수행하는 것이 가능하지만 찾고있는 것이 아니라고 확신합니다.

비트 맵 캐싱은 하나의 비주얼이 두 번 이상 칠해지기 때문에 유용합니다. 따라서 한 번만 렌더링되고 이후의 렌더링은 캐시에서 복사됩니다.

가상화를 살펴보아야합니다 (Shoaib의 답변 참조).

Article about bitmap caching.