2009-05-28 7 views
0

wpf를 사용하여 mvvm 앱을 개발 중입니다. 텍스트 상자에 텍스트가있는 경우 사용자가 탭을 변경하지 못하게하기위한 요구 사항이 추가되었습니다.MVVM Tabcontrol 변경 탭

viewmodel에서 이것을 완전히 수행하는 가장 좋은 방법은 무엇입니까? TabControl에 종속성 명령이 없기 때문에 tabitem을 차단하는 방법을 모르겠다. 내 자신의 tabcontrol을 굴려서 SelectionChanged 이벤트 주위에 ICommand를 작성해야합니까?

필자는 SelectionChanged 이벤트의 코드 뒤에 코드를 삽입해야합니까?

내가 생각하지 못한 대안이 있습니까?

답변

5

각 TabItem의 IsEnabled 속성을 ViewModel의 속성 (예 : ViewModel.TabsEnabled)에 바인딩하고 텍스트 상자에 텍스트가 있으면이 속성을 False로 설정할 수 있습니다. 그런 식으로 특정 뷰에 대한 코드 숨김없이 ViewModel에서 해당 탭을 활성화/비활성화 할 수 있습니다.

다음
<TabItem IsEnabled="{Binding Source={x:Static local:ViewModel.TabsEnabled}}"/> 

당신이 바로 그 때 하나의 ViewModel에 TabsEnabled 속성을 설정해야합니다 : 당신이보기에 다음과 같은 뭔가를해야 의미

는 (당신의 ViewModel이의 ViewModel라는 정적 인 클래스입니다 가정) 텍스트 상자에 내용이 있습니다. 이 작업을 수행하는 데는 몇 가지 방법이 있지만, ViewModel에 바인딩 된 경우 변경 사항을 수신하고 TabsEnabled를 적절하게 설정해야합니다.

+1

내가 읽은 바로는 TabsEnabled * 대신 IsEnabled *를 사용하는 것이 더 정확합니다. * Tabs *는 뷰 모델 (뷰 모델에서)에 대한 지식을 전제로합니다. – si618