2

プロジェクトに Caliburn Micro を使用しており、UI の一部として Fluent Ribbon を使用することにしました。私の ShellView は非常にシンプルで、次のようにレイアウトされています。

  • 4 つのタブを持つリボン コントロール。
  • アクティブアイテム。

アクティブなアイテムは、リボンの選択されたタブに応じて動的に変更されます。

質問:

モジュール性と CM 自体に継承されるすべての利点を維持しながら、現在アクティブな ViewModel (ActiveItem) の 2 番目のビューとしてリボン コントロールを使用する適切な方法は何ですか? また、ViewModel 間でリボン コントロールを「共有」するにはどうすればよいでしょうか?

詳細:

私の ShellViewModel は「Conductor.Collection.OneActive」タイプであり、選択したタブに関連付ける特定の ViewModel に ActiveItem を変更します (イベントが発生したとき)。

私のリボンは、次のように XAML で定義されています。

<ContentControl x:Name="RibbonBar" Micro:View.Model="{Binding ActiveItem}" Micro:View.Context="Ribbon" />

示されているように、リボン コントロールはコンテキスト ビューとして現在アクティブなアイテムにバインドされています。これは実際には 1 つのビューで機能します。これは、デフォルトの CM 規則により、サブ名前空間でコンテキスト ビューを検索するためです (たとえば、ビューへのパスがViews.TasksTabViewの場合、Views.TasksTabでコンテキスト ビューを検索します)。リボン)。

問題は、ActiveItem を変更すると、名前空間が異なるため、コンテキスト ビューを見つけることができなくなるため、1 つのタブでしか機能しないことです。

また、独自の ViewLocator 規則を作成しようとしましたが、成功しませんでした。

ありがとうございました。

4

1 に答える 1

2

残念ながら答えがないので、自分で答えます。

リボンを見つけるための追加の ViewLocator ロジックを書くことができましたが、いくつかの問題が発生しました (CM でのバインドは 1 回しか機能しないようです。そのため、リボンが配置されて VM にバインドされた後、追加のコンテキスト ビューの変更は何もしませんでした。見つけにくいバグもあります)。

その時、私は別のアプローチを取りました。リボンを独自の ViewModel に分離し、残りのモジュールと共にシェルに合成しました。EventAggregator を使用し、必要に応じて注入します。私が望んでいたアプローチではありませんが、今のところうまくいきます。

誰かがより良い回答を投稿した場合、私は間違いなくそれを受け入れます。

于 2012-02-14T21:09:54.003 に答える