2013-07-10 1 views
0

그 안에 2 개의 TabItem이있는 TabControl이있는 창이 있습니다. 두 번째 탭 안에는 내 뷰 모델 내부에 문자열 속성에 대한 바인딩이있는 TextBox가 있습니다. 사용자가 다른 탭을 클릭 할 때마다 (그리고 사용자가 창을 닫을 때도)이 속성 (또는 TextBox는 연결에 의해 바뀌고 속성을 지울 것이기 때문에)을 지울 수 있기를 원합니다. 나는 MVAM 패턴을 따르려고하기 때문에 XAML만으로이 작업을 수행 할 수 있기를 바라고있다. (코드가 없기 때문에 내 뷰 모델은 TabControl이나 TextBox에 대해 알지 못한다.)TabControl의 선택된 탭을 사용하여 변수를 지우십시오 - WPF

저는 몇 가지 다른 것들을 시도해 봤지만 제대로 작동하지 못하고 WPF가 개선되는 중에도 상당히 익숙합니다. 내 탭 안에는 ListViews와 ComboBoxes도 있는데, 이해 한 것부터 TabChanged 이벤트를 버블 할 것입니다 (탭 선택이 변경 될 때와 동일). 어떤 도움을 주시면 감사하겠습니다.

<TabControl> 
<TabItem> 
    ...Stuff in first tab goes here 
</TabItem> 

<TabItem Header="Rules"> 
    <TabItem.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{IsSelected}" Value="True"> 
        <Setter TargetName="UserBox" Property="Text" Value="" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </TabItem.Style> 


    <GroupBox> 
     <UniformGrid> 
      <ListView ItemsSource="{Binding Source={StaticResource rulesViewModel}, Path=RulesList}"> 
       <ListView.View> 
        <GridView> 
         <GridViewColumn Header="Rules"/> 
        </GridView> 
       </ListView.View> 
      </ListView> 

      <DockPanel> 
       <TextBox Name="UserBox" Text="{Binding Source={StaticResource rulesViewModel}, Path=User}" /> 
      </DockPanel> 
     </UniformGrid> 
    </GroupBox> 
</TabItem> 

내가 바인딩 을 읽어 줄을 확신 = "{에 isSelected}"가 잘못 : 여기

은 (요점 보여주는 스 니펫) 내 시도 중 하나였다. 하지만 올바른 속성을 타겟팅하는 방법을 모르겠습니다. 어떤 아이디어?

답변

0

나는 가장 좋은 방법은 대화 형 라이브러리를 사용하여 SelectionChanged 속성을 포착하고 속성을 변경하는 것이라고 생각합니다. 그것은 다음과 같이 보일 것입니다 :

<TabControl> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="SelectionChanged"> 
      <ei:ChangePropertyAction TargetObject="{Binding Path=Path.To.ViewModel}" PropertyName="MyProperty" Value="" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</TabControl> 

또한 텍스트 상자의 값을 변경하도록 선택할 수 있습니다 - 다음과 같이 할 수는 ChangePropertyAction 객체를 수정해야하는 것이 경우를 :

<ei:ChangePropertyAction TargetName="UserBox" PropertyName="Text" Value="" /> 
+0

:) 작성하지만, 아무튼 할 수있다 작동하지 않는 것 같습니다. 다른 이벤트를 시도했지만 아무 반응이없는 것 같습니다. – AXG1010

0

다른 탭에서 내용을 지우려는 탭의 SelectedIndex = -1을 설정해야합니다.

SelectedIndex = -1은 기본 탭이므로 기본적으로이 탭을 기본 탭으로 만듭니다. 조건은 다음과 같습니다.

SelectedIndex! = -1, 텍스트 취소해야 또는 응용 프로그램 종료시, 텍스트가 나는 논리를 제공 한

을 취소해야, 코드가 지금은 당신이 무엇을 제안 시도