2012-02-02 4 views
0

저는 C# WPF로 작성된 응용 프로그램의 인터페이스를 "설계"하고 있습니다.뷰를 사용하여 프로그래밍 방식으로 탭 전환하는 방법?

유지 관리를 쉽게하기 위해 각 탭 내용을 다른 XAML file으로 감 쌉니다. 그래서 내 프로젝트에서, 나는 각 파일에있는 응용 프로그램의 한 탭을 나타내는 3 XAML 파일을 가지고 "보기"라는 폴더를 가지고.

단추를 특정 탭으로 누르 자마자 해당 탭 사이를 탐색 할 수 있기를 원합니다.

<DockPanel LastChildFill="True"> 
    <StatusBar Name="statusBar" DockPanel.Dock="Bottom" Height="22"> 
     <StatusBarItem x:Name="messagePanel" Content="Ready" VerticalAlignment="Center" /> 
     <StatusBarItem Grid.Column="1" Margin="5,2" HorizontalAlignment="Right" > 
      <ProgressBar x:Name="progressPanel" IsIndeterminate="False" Width="160" Height="18" Visibility="Collapsed" /> 
     </StatusBarItem> 
    </StatusBar> 

    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="190" /> 
      <RowDefinition Height="6" /> 
      <RowDefinition Height="110*" /> 
     </Grid.RowDefinitions> 

     <views:EventsView x:Name="eventsView" Grid.Row="2" Margin="4" /> 

     <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch" ResizeBehavior="PreviousAndNext" ShowsPreview="True" ResizeDirection="Rows" /> 

     <TabControl Margin="4" Name="tabControl1"> 
      <TabItem Header="Configuration" Name="tabItemConfiguration"> 
       <views:Configuration /> 
      </TabItem> 

      <TabItem Header="Classification" Name="tabItemClassification" Visibility="Hidden"> 
       <views:Classifier/> 
      </TabItem>     
     </TabControl> 

    </Grid> 
</DockPanel> 

질문 : 가 어떻게 Switch가 아래로 내려가 않는

e.g : I am at Tab one called, Configuration. (the other two tabs are hidden). As soon as i hit a "start" button i want my Actual tab to be hidden,and the second tab to be shown in its place.

문제가

, 난 그냥 같이 탭을 유지하는 기본 창을 하나의 탭에서 프로그램 적으로 다른 하나의 "클릭"이벤트에서 톤? 내가 다른 XAML 파일에 있다는 것을 기억하십시오. (적어도 내가 액세스 할 수있는 방법을 모르는 경우) 코드 뒤에서 코드를 수행 할 때 다른 탭의 참조로 참조하십시오.

미리 감사드립니다. 이 날의 탭에 대한 액세스 권한을 준 이렇게

하지만, 내가 어떻게 대신 작은 탭 탭의 내용을 표시 할 : 그 긴 코드에 대한 유감은

편집 붙여 넣기?

MainWindow.Instance.tabItemClassification.Visibility = Visibility.Visible; MainWindow.Instance.tabItemConfiguration.Visibility = Visibility.Visible; 

는 사실이 내 문제를 해결 번째 탭

답변

0

의 내용을 표시합니다.

MainWindow.Instance.tabItemClassification.Visibility = Visibility.Visible; 
     MainWindow.Instance.tabItemConfiguration.Visibility = Visibility.Hidden; 

     // Changes the view to the classification tab 
     MainWindow.Instance.tabController.SelectedIndex = 1; 

좋은 하루 보내십시오.

1
내가보기 엔이 패턴으로 MVVM 디자인 패턴

를 조사하는 것이 좋습니다 것입니다

, 당신은 바인딩 할 당신의 당신의 탭 항목을 표현하고, 다른 데이터 필드에 SelectedItem 또는 SelectedIndex 바인딩 개체의 컬렉션에 TabControl.ItemsSource DataContext. TabItems 각각은 ViewModel이고 다른 View을 사용하여 그려지며 선택된 항목을 변경하려면 SelectedValue 속성을 설정합니다.

다음은 예입니다.당신의 MAINVIEW의 DataContext에이다

클래스는 다음과 같이 보일 것이다 :이 경우

public class MainViewModel : INotifyPropertyChanged 
{ 
    // These should be expanded into full properties with get/set methods 
    // and the set method should raise the PropertyChanged event 
    public ObservableCollection<ITabViewModel> TabViewModels { get; set; } 
    public ITabViewModel SelectedTabIndex { get; set; } 
    public ICommand ChangeTabCommand { get; set; } 

    public MainViewModel() 
    { 
     TabViewModels = new ObservableCollection<ITabViewModel>(); 
     TabViewModels.Add(new ConfigurationTabViewModel()); 
     TabViewModels.Add(new ClassificationTabViewModel()); 

     SelectedTabIndex = 0; 

     ChangeTabCommand = new RelayCommand<int>(ChangeTabIndex); 
    } 

    void ChangeTabIndex(int tabIndex) 
    { 
     if (tabIndex >= 0 && tabIndex < TabViewModels.Count) 
      SelectedTabIndex = tabIndex; 
    } 

    // Also implement INotifyPropertyChanged 
} 

, 기본 XAML 뷰는 다음과 같이 보일 것이다 :

<TabControl ItemsSource="{Binding TabViewModels}" 
      SelectedIndex="{Binding SelectedTabIndex}"> 

    <TabControl.Resources> 
     <Style TargetType="{x:Type TabItem}"> 
      <Setter Property="Header" Value="{Binding Header}" /> 
     </Style> 

     <DataTemplate DataType="{x:Type viewModels:ConfigurationTabViewModel}"> 
      <views:Configuration /> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type viewModels:ClassificationTabViewModel}"> 
      <views:Classification /> 
     </DataTemplate> 

    </TabControl.Resources> 

</TabControl> 

당신이 관심이 있다면 , 나는 simple MVVM exampleINotifyPropertyChangeRelayCommand에 관한 더 많은 정보를 포함하고있는 블로그에 올렸고, Navigation with MVVM에 관한 기사는을 스왑하더라도 여기에 게시 한 것과 매우 유사한 예를 포함하고있다.에 SelectedItem 대신 ContentControl 인이 있습니다.

관련 문제