2009-07-03 10 views
1

どのようにWPFメニュー項目のハンドラメソッドは、ListView内のどの項目がクリックされたかを判別できますか?WPF - メニューハンドラメソッドでクリックされたアイテムを見つけるには?

編集: メニューは、ListView用に設定されたコンテキストメニューです。問題は、コンテキストメニュー項目が選択されたときにクリックされたListView項目を見つけることです。

+0

メニュー項目とリストビューの関係を明確にすることができますか –

答えて

2

Checkout ContextMenu.PlacementTarget。このオブジェクトは、ListViewItemが見つかるまで、ビジュアルツリー(VisualTreeHelper.GetParent)を歩くことができます。あなたのデータ項目のそれぞれがListViewItem.IsSelectedプロパティにバインドされIsSelected性質を持っている場合

0

は、その後、あなただけの選択されたものを見つけるためにあなたのデータを反復処理:

<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) ... 
} 
0

誰がこの問題を持っているだけの場合には、私のようなものになってしまった:

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... 
} 
関連する問題