0

さて、私はWPFと人気のあるMVVMパターンを理解しようとしています。

今、私はこの問題を抱えています。いくつかのタブがあるリボンコントロールを使用しています。私のViewModelには、現在アクティブなタブを反映するプロパティ「ActiveTab(文字列)」があります。

Ribboncontrolにはこの情報を表示するプロパティがないため、バインドできません。

だから私は考えていました:

選択したイベントを次のようにバインドできます。

        <r:RibbonTab Label="tab1" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab2" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab3" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab4" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab5" Selected="RibbonTab_Selected"></r:RibbonTab>

次に、コードビハインドで、Activetab=sender.Labelを使用してビューモデルにプロパティを設定します。

しかし、その後、ビューの背後にあるコードでビューモデルを参照する必要があります。

私はファイルの背後にあるコードを使用せずにこの問題を解決しようとしています。(MVVM)。

さて、本当の質問です 。イベントトリガーまたはイベントセッターを使用することはどういうわけか可能ですか。選択したイベントが発生したとき。セッターは、activetabプロパティをsender.Label value?に自動的に設定します。

xamlのみを使用します。

-私のかなり悪い英語と多分noobish質問のための私の言い訳。私はwpf=)で非常に新しいです


更新: 私がちょうど見つけたように、ribbonTabにisSelectedプロパティがあります。

ビューモデルのプロパティにバインドする方法に問題があります。

次のコードを試しました。

<Style TargetType="{x:Type r:RibbonTab}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="{Binding SelectedTab}" Value="{Binding RelativeSource=Self, Path=Label}" />
                    </Trigger>
                </Style.Triggers>
            </Style>

しかし、これは機能しません:

Error   1   Cannot find the Style Property 'SelectedTab' on the type 'Microsoft.Windows.Controls.Ribbon.RibbonTab'. 

SelectedTabオフコースは私のビューモデルにあり、ribbonTabにはありません...

セッターを作成し、タブの値を使用してビューモデルのプロパティを設定するにはどうすればよいですか?=)

前もって感謝します!!

4

2 に答える 2

1

Microsoft リボンの 8 月のリリースでは、RibbonTab に IsSelected 依存関係プロパティがあるため、それにバインドできるはずです。

于 2010-09-14T10:58:28.277 に答える
0

RibbonControl がこれをバインド可能なプロパティとして公開していないことに驚いていますが、実際には使用していないので、あなたが正しいと思います...

依存関係プロパティとの間でのみバインディングを行うことができます。リボンにアクティブなタブ依存関係プロパティがない場合は、自分で作成する必要があります。これを行うには、リボン コントロールを独自のコントロールにサブクラス化し、それにプロパティを追加し、Selected イベント ハンドラーを使用してその値を更新します。一方、これを 1 つのビューでのみ使用している場合は、リボンをサブクラス化してそれにバインドする代わりに、プロパティをビューに追加できます。

いずれにせよ、現在選択されているタブをバインド エンジンに取得して、何か (ラベルまたはビューモデル) をバインドできるようにする必要があり、依存関係プロパティを介してのみエンジンに入ることができます。したがって、これをすべて XAML で行うことはできませんが、ビューとビューモデルを結合することなく行うことができます。


WPF の Microsoft リボン コントロールのドキュメントを参照して、Ribbon.SelectedItem プロパティを試しましたか? 現在選択されているタブが表示されるはずです。

于 2010-09-14T10:39:06.277 に答える