どのようにWPFメニュー項目のハンドラメソッドは、ListView内のどの項目がクリックされたかを判別できますか?WPF - メニューハンドラメソッドでクリックされたアイテムを見つけるには?
編集: メニューは、ListView用に設定されたコンテキストメニューです。問題は、コンテキストメニュー項目が選択されたときにクリックされたListView項目を見つけることです。
どのようにWPFメニュー項目のハンドラメソッドは、ListView内のどの項目がクリックされたかを判別できますか?WPF - メニューハンドラメソッドでクリックされたアイテムを見つけるには?
編集: メニューは、ListView用に設定されたコンテキストメニューです。問題は、コンテキストメニュー項目が選択されたときにクリックされたListView項目を見つけることです。
Checkout ContextMenu.PlacementTarget。このオブジェクトは、ListViewItemが見つかるまで、ビジュアルツリー(VisualTreeHelper.GetParent)を歩くことができます。あなたのデータ項目のそれぞれがListViewItem.IsSelected
プロパティにバインドされ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) ...
}
誰がこの問題を持っているだけの場合には、私のようなものになってしまった:
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...
}
メニュー項目とリストビューの関係を明確にすることができますか –