2010-08-13 5 views
3

MVVM 응용 프로그램에서 Fluent 리본을 사용하고 있습니다. 각 탭 항목에 대해 뷰와 뷰 모델을 연결합니다 (새 DataContext 설정). 선택한 탭 항목이 변경 될 때마다보기 및보기 모델 (DataContext)을 어떻게 변경합니까? WPF 용 Microsoft 리본과 같이 탭 항목이 선택 될 때마다 발생하는 이벤트가 있으면 좋았을 것입니다. 또한 리본 인스턴스에 대해 정의 된 SelectedTabChanged 이벤트는 선택한 탭이 변경 될 때 두 번 트리거됩니다. 예전 탭은 한 번, 새 탭 항목은 한 번입니다. 좋은 코딩 방법이라고 생각하지 않습니다.선택한 리본 탭 항목이 변경되면보기가 변경됩니다.

어쨌든 선택한 탭 항목이 변경 될 때보기를 변경하는 효율적인 방법을 제안하십시오 (코드 예제 또는 일부 코드 예제 링크).

감사합니다,

튜더

답변

0

나는 그것이 오래된 질문입니다 볼 수 있지만 정확히 똑같은 일을 위해 인터넷 검색을하는 동안이 우연히했습니다. 어쩌면 다른 사람들이이 대답을 미래에 유용하게 사용할 수 있습니다. 이 문제를 해결하는 데는 적어도 하나의 방법이 있습니다. 이는 바인딩과 각보기에 대한 컨테이너 TabControl을 사용하여 모든 리본 탭에 연결할 수 있습니다.

  • 리본과 TabControl을 함께 쌓아 올리십시오.
  • 탭 컨트롤의 SelectedIndex 속성을 리본의 SelectedTabIndex에 바인딩하십시오.
  • 탭 컨트롤에서 모든 탭 항목의 헤더를 숨 깁니다.

코드 :

<fluent:RibbonWindow 
    x:Class="FluentExample.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:fluent="clr-namespace:Fluent;assembly=Fluent" 
    > 
    <DockPanel LastChildFill="True"> 
     <fluent:Ribbon x:Name="_ribbon" DockPanel.Dock="Top"> 
      <!-- Ribbon tabs --> 
      <fluent:RibbonTabItem Header="Tab #1" /> 
      <fluent:RibbonTabItem Header="Tab #2" /> 
     </fluent:Ribbon> 

     <!-- Views container --> 
     <TabControl 
      DockPanel.Dock="Bottom" 
      SelectedIndex="{Binding ElementName=_ribbon, Path=SelectedTabIndex}" 
      > 

      <!-- Hide tab items headers --> 
      <TabControl.ItemContainerStyle> 
       <Style TargetType="{x:Type TabItem}"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </Style> 
      </TabControl.ItemContainerStyle> 

      <!-- Individual content for each tab go here --> 
      <TabItem><TextBlock Text="First Content View (#1)" /></TabItem> 
      <TabItem><TextBlock Text="Second Content View (#2)" /></TabItem> 
     </TabControl> 
    </DockPanel> 
</fluent:RibbonWindow> 
관련 문제