문제가있는 TabControl이 너무보기가 모든 것을 기본값으로 설정하여 재 작성, 그 내용을 다른 탭의 항목을 선택할 때마다 새로운 DataTemplate을을 instantiaties이다 사용합니다. 주어진 뷰 모델에 대해 고유 한 뷰를 갖도록 메커니즘을 구현해야합니다. MVVM이 없다면 ViewModel에 View 속성을 추가하기 만하면됩니다.하지만 MVVM의 목적을 크게 벗어납니다.
귀하의 의견에 따라 편집하십시오 : 나는 탭을 전환 할 때마다 TabControl은 DataTemplate의 새로운 시각 트리를 사용하여 내용을 표시한다는 것을 의미합니다.
는 다음의 예제를 보자 :
당신은 탭 # 1을 선택, 그 내용은 CustomerViewModel이다. NewCustomerView의 새 비주얼 트리가 DataTemplate에서 만들어지고 TabControl에 표시됩니다. 첫 번째 텍스트 상자에 캐럿이 있고 탭에 첫 번째 인덱스가 선택되어 있습니다.
탭 # 2를 선택합니다. 탭 # 1의 콘텐츠는 시각적 트리에 더 이상 표시되지 않고 삭제됩니다. 탭 # 2의 내용은 1과 동일한 프로세스를 따라 트리를 작성합니다.
# 1 탭을 다시 선택합니다. 탭 # 2의 콘텐츠는 시각적 트리에서 더 이상 존재하지 않으므로 삭제됩니다. 그리고 여기에서도 같은 메커니즘이 다시 활성화됩니다. DataTemplate에서 새로운 시각적 트리가 만들어지고 기본적으로 모든 것이 있습니다. 웁스! 그러나 WPF의 ContentPresenter는 한 번 내용이었던 가능한 모든 객체에 대해 내용의 트리를 메모리에 보관하지 않기 때문에 정상입니다.
=> 이론적 인 해결책은 자신을 시각적으로 구축하십시오. 예를 들어, 완전히 불완전한 세상에서 CustomViewModel에 고유 한 NewCustomerView를 만들고 속성을 통해이를 노출합니다 (예 :보기).
<DataTemplate DataType="{x:Type CustomerViewModel}">
<ContentPresenter Content="{Binding View}" />
</DataTemplate>
그리고 짜잔는 시각적 트리가 템플릿에서 생성 될 때, 발표자는 완전히 새로운 하나가 될 것입니다,하지만보기는 고유 및되지 않습니다 : 사용할 수 있습니다 새로운 DataTemplate을가 될 것입니다 캐럿은 사용자가 왼쪽으로 놓은 동일한 위치에있을 것이므로 탭에 대해 동일한 작업을 할 수 있습니다.
하지만 이전에 말했듯이 MVVM 철학에 전혀 문제가되지 않습니다. 지정된 ViewModel 또는 그와 비슷한 고유 한 View를 반환 할 수있는 정적 클래스를 작성하십시오.
또 다른 해결책은 SelectedTabIndex와 같은 것들을 ViewModel에 추가하고 바인딩하는 것, CurrentFocusPosition과 그것과 완전히 관련이 있습니다.
vin 디렉토리와 Subversion 디렉토리를 제거하면 zip을 조금 더 작게 만들 수 있습니다 :-) –
죄송합니다. bin 디렉토리. –
svn 및 bin dirs가없는 파일을 reuploaded, 조언을 위해 thx. 현재 약 900KB –