4

我在 MVVM 应用程序中使用 Fluent 功能区。对于每个选项卡项,我关联一个视图和一个视图模型(设置一个新的 DataContext)。每次更改所选选项卡项时,如何更改视图和视图模型(DataContext)?如果每次选择选项卡项时都会触发一个事件,就像 Microsoft Ribbon for WPF 那样,那就太好了。此外,为功能区实例定义的 SelectedTabChanged 事件会在所选选项卡更改时触发两次:一次用于旧选项卡,一次用于新选项卡项。我认为这不是一个好的编码习惯。

无论如何,请建议我在更改所选选项卡项时更改视图的有效方法。(代码示例或链接到一些代码示例)。

谢谢,

都铎王朝

4

1 回答 1

1

至少有一种相当可接受的方法来解决这个问题,这也很简单:通过绑定和使用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>
于 2014-03-26T18:45:23.273 回答