DockingManager基になるビュー モデルによって管理される一連のドキュメントを表示するために、AvalonDock (2.0) コントロールを利用するコントロールがあります。
<avalonDock:DockingManager DocumentsSource="{Binding Items}">
<avalonDock:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type avalonDockControls:LayoutItem}" BasedOn="{StaticResource DocumentItem}"/>
</avalonDock:DockingManager.LayoutItemContainerStyle>
<avalonDockLayout:LayoutRoot>
<avalonDockLayout:LayoutPanel Orientation="Horizontal">
<avalonDockLayout:LayoutDocumentPane/>
</avalonDockLayout:LayoutPanel>
</avalonDockLayout:LayoutRoot>
</avalonDock:DockingManager>
ドキュメント ビュー モデルにはIsSelectedプロパティがあり、ビュー モデルが選択されているときに、ドキュメントを選択して表示したいDockingManager。これを行うために、次のようにStyleforを更新しました。LayoutItem
<Style x:Key="DocumentItem" TargetType="{x:Type avalonDockControls:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.TabTitle}"/>
<Setter Property="IsSelected" Value="{Binding Model.IsSelected, Mode=TwoWay}"/>
</Style>
このアプローチは、コントロールが WPF アプリケーション内でホストされている場合は正常に機能しますが、コントロールが VSPackage 内でホストされている場合、ビュー モデルでドキュメントを選択しても、選択したドキュメントが表示されないことがよくあります。以下の画像では、ユーザーが Customer ノードをクリックして編集しましたが、顧客ドキュメントは表示されませんでした。

ビュー モデル レイヤーはIsSelected期待どおりに設定されており、コントロールが を使用するTabControlと、選択したドキュメントが常に一番上に表示されました。
AvalonDock 内の問題のようです。私が見つけているのはLayoutItem、ビューモデルを介して a が選択されている場合、リストの最初のドキュメントがレイヤーで true に再選択され、レイヤーでトリクルアップして true にLayoutDocument/LayoutContent/LayoutElementリセットされることです。レイヤーでビューモデルにバインドしたいのですが、そのレイヤーにはありません。IsSelectedLayoutItemIsSelectedLayoutDocument/LayoutContent/LayoutElementDependencyProperty
ビューモデルにバインドする別の方法を試しましIsSelectedたが、これまでのところ成功していません。他の誰かがこの問題に遭遇しましたか? 回避策やその他のアプローチを知っていますか? ドキュメントの選択を行うためだけに、非 MVVM アプローチを使用する必要はありません。
編集: VSPackage を使用しても、再現テスト ケースを作成するのが難しいため、この問題はわかりにくいようです。ToolWindowデュアルs と Mediator メッセージを使用して実際のコントロールをシミュレートする次のテスト ケースでは、ドキュメントの選択は正常に機能します。

このテスト ケース (WPF アプリと VSPackage を使用) はこちらから入手できます( をクリックしTools=>My command nameてツール ウィンドウを起動し、1 つのウィンドウにドキュメント タイトルを入力して選択するか、ウィンドウでドキュメントを作成して選択しますDockingManager)。