WPF

[WPF] View 를 미리 랜더링 하는 방법

Chanhongv 2024. 7. 1. 09:23

WPF 에서 Content Control 을 하나 만들어서 Binding 값을 변경하여 View 를 변경하는 방법을 사용할 수 있다.

그런데 만약 특정 View 가 여러개의 컨트롤 (예를 들면 컨트롤을 포함한 큰 DataGrid) 을 보여줘야 한다면 그 View 를 Load 할때 느려지는 문제가 발생할 수 있다.

 

그래서 미리 Instance 를 불러오거나 ContentControl 에 Binding 을 먼저 시켰다가 변경하거나 하는 방법들을 사용해 보았지만 효과는 없었던 것 같다.

 

Chat GPT, 구글링 등을 해보았지만 명쾌한 해답이 나오지 않아서 스스로 생각한 방법을 적용해보기로했다.

추가 ContentControl 을 만들어서 View 를 집어넣고 Hidden 시키는 방법이다.

 

  <Border Margin="15 5 15 0">
      <Grid>
          <ContentControl Content="{Binding PreRenderView}" Visibility="Hidden"/>
          <ContentControl Content="{Binding CurrentView}"/>
      </Grid>
  </Border>

 

이렇게 하면 미리 Rendering 이 되기 때문에 느려지는 문제를 해결할 수 있다.

하지만 모든 View 에 대해서 사용한다면 메모리 사용량이 증가 할 수 있기 때문에 랜더링이 느린 View 만 이 방법을 사용하는 것이 좋겠다.

 

"2024-08-06" 추가 코멘트

 - 결국 Hidden 되는 View 를 불러오는 데 소요되는 리소스가 있으므로 UI 가 느려지는 현상이 발생한다.

   그래서 특정 View 에 진입할 때 로딩창을 띄우는것으로 변경했다.