[Xamarin.Forms] CustomRenderer 제작 시 참고사항

2017. 6. 10. 19:31Mobile/Xamarin

Xamarin.Forms에서 다른 페이지로 Navigation 되었다가 다시 돌아오는 등의 경우에 페이지가 이전 정보를 유지한채 다시 생성됩니다. 이 때 CustomRenderer가 어떤 기준으로 어떤 값을 유지하면서 재생성되는지 고려하면서 개발이 필요합니다.

  1. Element와 Control 모두 새롭게 생성 됩니다. 이 때 OnElementChanged 이벤트가 호출되므로 초기화가 필요합니다.
  2. BindableProperty에 저장된 값은 100% 유지가 됩니다. 그외 변수, 일반 Property, 이벤트 등은 모두 소실됩니다. 따라서 유지되어야 하는 정보는 BindableProperty에 저장해두어야 합니다.
  3. 다른 페이지로 이동하면서 기존 Element가 메모리에서 소실될 때에는 OnElementChagned 이벤트가 발생하면서 OldElement가 제공됩니다. 불필요한 정보를 따로 저장해두거나, 제거하고 Event와 연결을 끊는 작업을 해야합니다.
  4. 다른 페이지에서 다시 현재 페이지로 되돌아오면 Element가 재생성되는데, 이 때 NewElement가 제공되므로 BindableProperty를 제외한 다른 이벤트나 변수 등의 초기화가 필요합니다. ViewRenderer를 사용했다면 이때 Control이 null 상태이므로 반드시 새롭게 생성한 후 BindableProperty를 바탕으로 초기화 해야 합니다.
  5. OnPropertyChanged 이벤트는 BindableProperty 값을 외부에서 할당했을 때만 호출되므로 신경쓸 필요가 없습니다.