ContextMenu
を含むものを設計する必要がありますMenuItem
。これには、ViewModelMenuItem
の型のプロパティにバインドするより深いレベルのメニュー リストがあります。ObservableCollection
コードは次のようになります。
<ContextMenu DataContext="{Binding PlacementTarget.DataContext,
RelativeSource={RelativeSource Self}}" >
...
<MenuItem Header="Map to account" >
<ItemsControl ItemsSource="{Binding RelatedAccounts}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding Number}"
Command="{Binding PlacementTarget.DataContext.MapToAccountCommand,
RelativeSource={RelativeSource AncestorType=ContextMenu}}"
CommandParameter="{Binding}"
/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</MenuItem>
...
</ContextMenu>
アイデアは、ユーザーが UI から 1 つの支払い項目を右クリックし、[アカウントにマップ] メニュー項目に移動すると、メニュー項目のより深いレベルが表示され、ユーザーが選択できるすべての関連アカウントが一覧表示されます (へのItemsControl
バインドを見ることができますRelatedAccounts
)
すべてが正常に機能し、ViewModel から公開したすべての関連アカウントがコンテキスト メニューに正しく表示されます。ユーザーが 1 つのアカウントを右クリックすると、選択したアカウントの渡されたパラメーターで ViewModelのCommand
プロパティが実行されます。MapToAccountCommand
しかし、私が望まない動作が 1 つあります。マウスが [アカウントにマップ] メニューよりも 1 レベル深くなると、実際にはメニュー項目のコレクション全体が強調表示されます。以下の写真をご覧ください。
上記は「USD Account 1」にマウスを合わせた場合です。
また、マウスが特定のアカウントではなく、より深いレベルのメニュー内の他の領域にある場合でも、ハイライト効果はまだそこにあります。画像を参照してください。
これは明らかに正しくありません。誰が私が間違ったことを教えてもらえますか? ありがとう!