2009-07-03 4 views
1

Wie kann die Handler-Methode eines WPF-Menüelements bestimmen, auf welches Element in einem ListView geklickt wurde?WPF - Wie finde ich ein Objekt in der Menü-Handler-Methode?

Bearbeiten: Das Menü ist ein Kontextmenü, das für die ListView festgelegt wurde. Das Problem besteht darin, zu ermitteln, auf welches ListView-Element bei Auswahl des Kontextmenüelements geklickt wurde.

+0

Könnten Sie die Beziehung zwischen dem Menüelement und der Listenansicht verdeutlichen? –

Antwort

2

Checkout ContextMenu.PlacementTarget, mit dem Sie den visuellen Baum (VisualTreeHelper.GetParent) durchlaufen können, bis Sie ein ListViewItem finden.

0

Wenn jede Ihrer Datenelemente eine IsSelected Eigenschaft hat, die auf die ListViewItem.IsSelected Eigenschaft gebunden ist, dann Sie Ihre Daten nur durchlaufen die ausgewählten zu finden:

<ListView ItemsSource="{Binding Items}"> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="IsSelected" Value="{Binding IsSelected}"/> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

Und in Ihrem Code:

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

Nur falls jemand dieses Problem hat, landete ich mit etwas nach oben wie:

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... 
} 
Verwandte Themen