2014-04-15 9 views
1

현재 유지하고있는 WinForms 응용 프로그램에는 수천 개의 노드가있는 트리 컨트롤이 있습니다. 각 노드는 사용자 정의 된 동적 생성 아이콘으로 그려지는 소유자입니다 (각 아이콘은 고유합니다). 이 응용 프로그램을 WPF로 변환하려고 생각하고 있지만이 트리 뷰를 올바르게 처리하는 방법을 모르겠습니다. WPF에서이 작업을 수행하는 표준 방법은 아이콘 콘텐트에 이미지 컨트롤이있는 각 항목의 템플릿을 사용하는 것이지만, 동적으로 생성 된 이미지를 수천 개 바인딩하면 성능이 걱정됩니다. OwnerDraw를 사용하면 아이콘을 저장할 필요가 없습니다. 실제로 노드가 실제로 표시 될 때만 아이콘을 생성하고 페인트 할 수 있습니다.WPF에 상응하는 OwnerDraw

WPF에서이 시나리오를 처리하는 표준 방법이 있습니까?

현재 응용 프로그램의 화면 캡처는 here에서 내가 다루고있는 것에 대한 아이디어를 제공합니다.

답변

1

올바른 트리 구현은 항상 항목을 가상화합니다. 즉, 현재 표시된 항목 만 데이터에 바인딩되고 렌더링됩니다. 이를 알기 만하면 필요에 따라 동적으로 이미지를 생성하십시오.

보기 측, 항목 템플릿 :

<DataTemplate> 
    <Image Source="{Binding Image}" /> 
<DataTemplate> 

모델의 측면 :

private ImageSource _image; 

public ImageSource Image { 
    get { return _image ?? (_image = CreateImage()); } 
} 

private ImageSource CreateImage() { 
    // load your image dynamically here 
    // If you're creating it from scratch, WriteableBitmap might help you 
} 

이 코드는 _image 필드에 이미지를 캐시합니다. 필요하지 않은 경우 Image에 액세스 할 때마다 간단하게 다시 만들 수 있습니다 (너무 자주 속성에 액세스하지 않도록주의하십시오).