リストビューでコンテキスト メニューを使用して、元のアイテムのデータを必要とするコードを実行しようとしています。
私は最初にこれをしました:
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 の質問と このMSDN フォーラムの質問を読みましたが、私の場合はどちらの記事も機能していないように見えるため、実際にこれを行う方法はまだわかりません。クリックされた項目をコンテキスト メニューに渡すより良い方法はありますか?
ありがとう!