リストビューでコンテキストメニューを使用して、元のアイテムのデータを必要とするコードを実行しようとしています。ContextMenu MenuItemの実行時にListViewでクリックされたListViewItemを特定する
私が最初にちょうどこれをしなかった:
XAML:
<ListView x:Name="lvResources" ScrollViewer.VerticalScrollBarVisibility="Visible">
<ListView.Resources>
<ContextMenu x:Key="resourceContextMenu">
<MenuItem Header="Get Metadata" Name="cmMetadata" Click="cmMetadata_Click" />
</ContextMenu>
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="ContextMenu" Value="{StaticResource resourceContextMenu}" />
</Style>
</ListView.ItemContainerStyle>
...
のC#:
private void cmMetadata_Click(object sender, RoutedEventArgs e)
{
// code that needs item data here
}
しかし、私は元のリストビューアイテムがそのようにアクセスできないことがわかりました。
MouseDownイベントを傍受してクリックされたlistviewitemにプライベートフィールドを設定するなど、これを回避する方法についていくつかの方法を読んだことがありますが、それはちょっとハッキリしているようですそのような方法でデータを渡します。そして、WPFは簡単だと思いますよね?私はこれをSO questionとMSDN forum questionと読んだことがありますが、私はまだこれらの記事のどちらも私の場合にはうまくいかないので、実際にこれを行う方法がわかりません。コンテキストメニューにクリックされたアイテムを渡すより良い方法はありますか?
ありがとうございます!
+1すてきで簡単な解決策です。 – patjbs
私は、単にリストビューの選択を使って何がクリックされたのかを判断することに言及しておきたいと思います。ユーザーが複数のアイテムを選択したが、クリックしたアイテムでコードを実行したいだけの場合は、それはうまくいきません。その場合は検出できません。 – patjbs
+1それは私を大いに助けました。 –