2010-08-13 4 views
3

Я использую Свободную ленту в приложении MVVM. Для каждого элемента табуляции я сопоставляю представление и модель представления (устанавливаю новый DataContext). Как изменить вид и модель представления (DataContext) каждый раз при изменении выбранного элемента табуляции? Было бы неплохо иметь событие, которое срабатывает каждый раз, когда выбран элемент табуляции, например, Microsoft Ribbon для WPF. Кроме того, событие SelectedTabChanged, определенное для экземпляра ленты, запускается дважды при изменении выбранной вкладки: одно время для старой вкладки и одно время для нового элемента табуляции. Я не думаю, что это хорошая практика кодирования.Измените вид при изменении выбранной вкладки ленты ленты

В любом случае, пожалуйста, предложите мне эффективный способ изменения вида при изменении выбранного элемента табуляции (пример кода или ссылка на некоторые примеры кода).

Спасибо,

Tudor

ответ

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> 
Смежные вопросы