2011-09-19 9 views
0

주 시간과 추가 시간의 두 탭이있는 TabControl이 있습니다. 기본보기 모델에는 주요 시간과 추가 시간이 속성으로 포함되어 있으며, 첫 번째 탭은 주 시간에 바인딩되고 두 번째 탭은 추가 시간으로 묶입니다. 매시간마다 명확한 명령이 있습니다 (DelegateCommand부터 Prism까지). TabControl 상단에는 "모두 지우기"명령 (CompositeCommand)이있는 버튼이 있습니다. 메인 뷰 모델의 생성자에서 시간이 생성됩니다.WPF TabControl 바인딩 문제

문제 : 나는에 (두번째 탭을 선택할 때까지 사용할 수 없습니다 추가 시간에서

명령은하지의 원인을 존재하고 그들은 명령 "모두 지우기"에 참여하지되며, 버튼 "모두 지우기" 첫 번째 탭은 아무 것도 없지만 두 번째 탭은 있습니다.)

TabControl에서 가상화를 비활성화하려고했으나 도움이되지 않았습니다. 또한 데이터를로드 한 후 매시간 clearCommand.RaiseCanExecuteChanged으로 전화합니다.

업데이트 : 디버거에서 몇 시간을 반복하고 명령을 실행할 수 있는지 확인하면 문제가 없으며 UI가 올바르게 업데이트됩니다. 하지만 디버거가 없으면 그렇지 않습니다.

+0

여전히 탭을 선택하지 않은 상태에서 두 번째 탭에 저장할 내용이 있습니까? 저장할 무언가를 갖기 위해 뭔가를 바꿀 필요가 없습니까? 그리고 뭔가를 바꾸려면 탭을 선택하지 않아도됩니까? – PVitt

+0

@PVitt : 1. 예. 2.하지 마십시오. 3.하지 마십시오. 첫 번째 탭은 비어 있고 (데이터가 없음) 두 번째 탭에는 저장할 수있는 데이터가 있습니다. 사실 그것은 명령을 저장하는 것이지만 완전히 이해하기 위해 게시물을 지우고 명령을 "지우기"로 바꿉니다. –

답변

0

나는 내가 제대로 이해 모르겠지만 당신의 디자인에 비정상적인 동작이 발생할 수 있습니다 내가 그 생각을 할 수있는 두 가지가있다

  1. 프리즘의 DelegateCommand 자동으로 다시 쿼리하지 않습니다 CanExecute를 매개 변수가있는 경우 변경. 이 문제인지 아닌지 내가 명령이 자동으로 매개 변수가

  2. 변경 때 CanExecute을의 재평가 할 때 나는 종종 Galasoft's MVVM LightRelayCommand를 사용 .... 내가 어떤 종류의 RelayCommand를 사용하도록 전환 할 것, 확인하려면

    기본적으로 WPF는 표시되지 않는 TabItem을 언로드합니다. 따라서 SaveAllButton.Enabled 속성이 Tab1.SaveButton.EnabledTab2.SaveButton.Enabled을 기반으로하는 경우 Tab2는 저장할 항목이 있지만 Tab1에는 포커스가없고 Tab1에 포커스가 있으면 Tab2가 표시되지 않고로드되지 않으므로 SaveAll 단추가 비활성화됩니다. 이 경우에 테스트하려면 ListBox과 같은 것을 사용하도록 전환하십시오. 이 경우 here 코드를 사용하여 TabControl이 보이지 않는 탭을 언로드하지 않도록 할 수 있습니다.

+0

도움이 되긴했지만 도움이되지 못했습니다. 데이터를로드 한 후에 모든 시간 동안'RaiseCanExecuteChanged'를 호출하기 때문에 포블 렘은'DelegateCommand'에 없습니다. (필자도 생각하지만'RElayCommand'도 시도 할 것입니다.) –

+0

@JohnKZ 당신은'TabControl' 이외의 것을 시도 했습니까? 귀하의 문제는 그것이 선택 될 때까지 탭이로드되지 않을 수 있습니다 (# 2) – Rachel

+0

: 레이첼 감사합니다. 나는'TabControl'을 제거하고'ListBox'를 사용하지 않았습니다. 방금 레이아웃의 'Visibility'속성을 변경하고'RadioButton'을 사용하여 보이는 레이아웃을 변경합니다. –