관리 메뉴

KorSA

Telerik RadTabbedView 에서 첫 Tab화면이 안나올 때 본문

Development Experience/C#

Telerik RadTabbedView 에서 첫 Tab화면이 안나올 때

Praiv. 2020. 2. 6. 17:12
320x100

현재 내가 사용하고 있는 기술 스택은

WPF + Telerik UI for WPF + Caliburn Micro + Ninject 이다.

 

지금까진 CM에서 제공해주는 DisplayRootViewFor() 함수를 사용하여 UI를 로딩하였다.

이 방식은 한가지 단점이 있는데, Telerik의 RadTabbedWindow 화면을 감싸는 또 하나의 컨테이너가 생성된다는 것이었다. 이로 인해 타이틀바가 2개가 되는 상황이 발생하였다.

 

이를 해결하고자 DisplayRootViewFor() 함수를 사용하는 대신 직접 MainView와 MainViewModel을 바인딩시키고

MainView의 show() 함수를 호출하는 방식으로 변경하였다. (직접 View와 ViewModel을 바인딩시키려면 ViewModelBinder를 이용하면된다.)

 

이렇게 해결이 되나 싶었는데.. 이게 왠 걸 두개의 Tab 중 첫번째 Tab의 화면이 나오질 않았다.

더 이상한 건 첫번째 Tab을 drag & drop으로 두번째 Tab 뒤에 가져다 놓으면 정상적으로 보이는 것이었다.

 

이 증상으로 볼 때, 초기 MainView 로딩 시 첫번째 Tab의 View와 ViewModel이 바인딩이 안된건 아닐까 의심이 들었다.

그래서 MainView의 OnShowAnimationFinished() 함수를 오버라이딩하여 첫번째 Tab을 제거한 후 다시 추가하는 코드를 작성하였다. 이렇게 하면 내가 Drag & Drop 을 하던 그 행위와 비슷하지 않을까 싶어서였다. 그래서 작성한 코드가

 

// Add Removing & Inserting first Tab because this not show at first time
        protected override void OnShowAnimationFinished()
        {
            base.OnShowAnimationFinished();

            var first = this.Items[0];
            this.Items.RemoveAt(0);
            this.Items.Add(first);
        }

 

 

이렇게 되시겠다.

Tab의 순서는 바뀌지만 그래도 두 개의 Tab 모두 화면이 잘 나왔다.

근본적인 원인을 아직 파악하지 못하여 우선 트릭을 썻지만, 그 원인을 알게 되는 날이 빨리 오면 좋겠다.

728x90
728x90
Comments