Изменить вид при изменении выбранного элемента вкладки ленты - PullRequest
3 голосов
/ 13 августа 2010

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

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

Спасибо,

Тудор

1 Ответ

0 голосов
/ 26 марта 2014

Я вижу, что это старый вопрос, но я наткнулся на это, одновременно пытаясь найти то же самое.Возможно, другие найдут этот ответ полезным в будущем.Существует по крайней мере один достаточно приемлемый способ решения этой проблемы, который также довольно прост: с помощью привязок и использования контейнера 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>
...