WPF メニュー項目のハンドラー メソッドは、ListView 内のどの項目がクリックされたかをどのように判断できますか?
編集: メニューは、ListView に設定されたコンテキスト メニューです。問題は、コンテキスト メニュー項目が選択されたときに、どの ListView 項目がクリックされたかを見つけることです。
ContextMenu.PlacementTarget をチェックアウトします。このオブジェクトは、ListViewItem が見つかるまで、ビジュアル ツリー (VisualTreeHelper.GetParent) をたどることができます。
他の誰かがこの問題を抱えている場合に備えて、私は次のようなものになりました:
private void ListViewItems_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var frameworkElement = e.OriginalSource as FrameworkElement;
var item = frameworkElement.DataContext as MyDataItem;
if(null == item)
{
return;
}
// TODO: Use item here...
}
各データ項目にIsSelected
プロパティにバインドされたListViewItem.IsSelected
プロパティがある場合は、データを繰り返し処理して、選択したものを見つけます。
<ListView ItemsSource="{Binding Items}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
そしてあなたのコードで:
public ICollection<DataItem> Items
{
get { return _items; }
}
public IEnumerable<DataItem> SelectedItems
{
get
{
foreach (var item in Items)
{
if (item.IsSelected)
yield return item;
}
}
}
private void DoSomethingWithSelectedItems()
{
foreach (var item in SelectedItems) ...
}