4

MVVM アプリケーションで Fluent リボンを使用しています。各タブ項目に対して、ビューとビュー モデルを関連付けます (新しい DataContext を設定します)。選択したタブ項目が変更されるたびに、ビューとビュー モデル (DataContext) を変更するにはどうすればよいですか? Microsoft Ribbon for WPF のように、タブ項目が選択されるたびに発生するイベントがあると便利です。さらに、リボン インスタンスに対して定義された SelectedTabChanged イベントは、選択されたタブが変更されると 2 回トリガーされます。1 回は古いタブで、もう 1 回は新しいタブ項目です。それは良いコーディング方法ではないと思います。

とにかく、選択したタブ項目が変更されたときにビューを変更する効率的な方法を教えてください(コード例またはいくつかのコード例へのリンク)。

ありがとう、

チューダー

4

1 に答える 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 に答える