2012-06-19 2 views
0

매우 이상한 문제가 발생합니다. WPF에서 3 개의 tabItem을 포함하는 tabControl이 있습니다. tabControl의 SelectedIndex에서 "OneWayToSource"모드에서 내 viewModel 클래스 내부의 속성에 바인딩을 만들었습니다.TabItem이 영구적으로 차단됩니다.

다음은 XAML 코드입니다 :

<TabControl Name="mainTabControl" SelectedIndex="{Binding SelectedTabIndex, Mode=OneWayToSource}" > 
     <TabItem Header="Tab 01" Name="tab01"> ... </TabItem> 
     <TabItem Header="Tab 02" Name="tab02"> ... </TabItem> 
     <TabItem Header="Tab 03" Name="tab03"> ... </TabItem> 
</TabControl> 

그리고 내 뷰 모델에 : 당신이 볼 수 있듯이

private int m_selectedTabIndex; 
    public int SelectedTabIndex 
    { 
     get 
     { return m_selectedTabIndex; } 
     set 
     { 
      SetAndNotify(ref m_selectedTabIndex, value,() => SelectedTabIndex); 
      SelectedTabChanged(); 
     } 
    } 

private void SelectedTabChanged() 
    { 
     // Some code 
    } 

는 매번 내 뷰 모델의 SelectedTabIndex 속성이 변경되면 SelectedTabChanged() 방법은 실행이 완벽하게 작동합니다. 난 못해,이 같은 선택 보이지만 영구적으로 선택된 상태로 유지, 내 SelectedTabChanged() 방법 안에 예를 System.Windows.MessageBox.Show("Some Text")에 대한 사용하여 메시지를 보여줄 때, 나는 다른 TabItem의 이전 선택된 탭이 차단됩니다 선택 :

내 이상한 문제가 있다는 것입니다 더 이상 내용을 볼 수 없습니다.

그냥 명확히 : 모달 창

왜 일어나고을 보였다 때 내가 전에 언급 한 바와 같이,이 이상한 문제는 어떻게됩니까? 이 문제를 어떻게 해결할 수 있습니까?

나는 분명히 자신을 설명하기를 희망한다.

미리 감사드립니다.

답변

2

내 문제가 해결되었습니다. 이후 WPF에서 새로운 오전 정말 모달 창이 탭을 차단하게 이해가 안 돼요. 하지만 Dispatcher 클래스는 모든 컨트롤을 차단하지 못하도록하는 메소드를 비동기 적으로 실행할 수 있도록 검색하고 발견했습니다.

public int SelectedTabIndex 
    { 
     get 
     { return m_selectedTabIndex; } 
     set 
     { 
      SetAndNotify(ref m_selectedTabIndex, value,() => SelectedTabIndex); 
      Dispatcher.CurrentDispatcher.BeginInvoke(new Action(SelectedTabChanged), null); 
     } 
    } 

정말 날은 다음되었다 도움을 줄 : 다른 사람이 도움을 누군가가 이와 유사한 문제가 발생 할 수 있습니다

Dispatcher.CurrentDispatcher.BeginInvoke(new Action(SelectedTabChanged), null); 

희망

나는 다음과 같이 내 뷰 모델 코드를 변경했습니다.

0

Im 귀하의 문제를 이해하고 있지만 MessageBox.Show은 중첩 된 메시지 펌프를 생성하고 기본 Dispatcher을 차단하므로 기본 창 ('모달'인 이유)이 '동결'됩니다. 모달이 아닌 MessageBox 스타일 알림을 표시해야하는 경우 내 조언은 메시지가 표시 될 때 표시되도록 숨겨진 가시성을 가진 TabItem에있는 메시지가 포함 된 패널을 만드는 것입니다. 해당 시나리오에서 탭 선택 항목이 여전히 작동해야합니다.

+0

답장을 보내 주셔서 감사합니다. 실제로 예외 메시지 일 수 있으므로 모달 창을 표시해야합니다. 따라서 탭을 차단하지 않고 모달 창을 표시 할 수있게하려고합니다. – Dante

+0

모달, 그것은 tabcontrol을 차단하므로 가능한 해결책은 없습니다. IMO –

관련 문제