MVVM WPF:イベントがトリガーされたときに、コントロールプロパティをViewModelに反映する
-
02-10-2019 - |
質問
さて、私はWPFと人気のあるMVVMパターンを理解しようとしています。
今、私はこの問題を抱えています。いくつかのタブを備えたリボンコントロールを使用しています。私のViewModelには、現在アクティブなタブを反映するプロパティ「Activetab(String)」があります。
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>
次に、CodeBehindでActiveTab = sender.labelを使用してViewModelにプロパティを設定します
しかし、それから私は私の見解のコードベヒンドで私のビューモデルのリフェレンスが必要になります。
ファイルの背後にあるコードを使用せずにこの問題を解決しようとしています。 (MVVM)。
今本当の質問:イベントトリガーまたはイベントセッターを使用することは何らかの形で可能ですか?選択したイベントが解雇されたとき。セッターは、ActiveTabプロパティをSender.Label値に自動的に設定しますか?
XAMLのみを使用します。
- 私のかなり悪い英語と多分騒々しい質問に対する私の言い訳。私はwpf =)でとても新しいです
アップデート:私が知ったように、Ribbontabに発行されたプロパティがあります。
今、私はそれを私のviewmodelのプロパティにバインドする方法についていくつかの問題を抱えています。
次のコードを試しました。
<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 offcourseは私のviewmodelにあり、ribbontabではありません...
セッターを作成するにはどうすればよいですか。タブの値でviewmodelにプロパティを設定できますか? =)
前もって感謝します!!
解決
Microsoft Ribbonの8月のリリースであるRibbontabには、発行された依存関係プロパティがあるため、それにバインドできるはずです。
他のヒント
リボンコントロールがこれをバインド可能なプロパティとして公開していないことに驚いていますが、私は本当にそれを使用していませんので、あなたは正しいと思います...
依存関係プロパティとの間でのバインディングのみを行うことができ、リボンにアクティブなタブ依存関係プロパティがない場合は、自分で作る必要があります。これを行うには、リボンコントロールを独自の1つにサブクラス化し、プロパティを追加し、選択したイベントハンドラーを使用して値を更新することができます。一方、これを1つのビューでのみ使用している場合は、リボンをサブクラス化する代わりにビューにプロパティを追加してバインドできます。
いずれにせよ、現在選択しているタブをバインディングエンジンに入れて、すべてを(ラベルまたはビューモデルのいずれか)にバインドできるようにする必要があり、依存関係プロパティを介してエンジンにのみ入力できます。したがって、XAMLでこれを完全に行うことはできませんが、ビューとViewModelの間に結合を導入せずに行うことができます。
WPFのMicrosoft Ribbon Controlのドキュメントを見るRibbon.SelectedItemプロパティを試しましたか?現在選択されているタブを提供するはずです。