WPF – Übergeodnetes ListView DataItem erhalten

by robert 12. June 2009 02:30

In einem ItemPanelItem eines ListViews wird bei Mausklick ein Event gefeuert:

6-12-2009 1-58-37 AM

Wie erhalten wir das DataItem für diesen ListView?

//Click event des Bildes
private void btnShowDetails_Click(object sender, RoutedEventArgs e)
{
    //auf der Suche nach dem zu Grunde liegenden DataItem
    var displayItem = lvLogItems.GetDataItemItem<LogDisplayItem>(e);
 
    //hier folgt die eigentlich Arbeit
}

“GetDataItem” ist eine ExtensionMethod die im visuellen Baum solange von Eltern-Element zu Eltern-Element wandert, bis das übergeordnete ListViewItem erreicht ist. Mit dem ListViewItem ist auch das DataItem zu erreichen.

Die Extension Method wird in folgender Klasse definiert und ist auch den nächsten Tagen in Speak-Lib zu finden.

public static class ListViewUtils
{
    public static TDataItem GetDataItemItem<TDataItem>(this ListView listView, RoutedEventArgs e)
    {
        var dependencyObject = (DependencyObject)e.OriginalSource;
 
        return GetDataItem<TDataItem>(dependencyObject, listView);
    }
 
    public static TDataItem GetDataItemItem<TDataItem>(this ListView listView, DependencyObject dependencyObject)
    {
        return GetDataItem<TDataItem>(dependencyObject, listView);
    }
 
    private static TDataItem GetDataItem<TDataItem>(DependencyObject dependencyObject, ListView listView)
    {
        while ((dependencyObject != null) && !(dependencyObject is ListViewItem))
            dependencyObject = VisualTreeHelper.GetParent(dependencyObject);
 
        return (TDataItem)listView.ItemContainerGenerator.ItemFromContainer(dependencyObject);
    }
}
Ich hoffe es nützt:-)

enjoyed the post?

Tags:

WPF

Comments are closed

About Oliver

shades-of-orange.com code blog logo I build web applications using ASP.NET and have a passion for javascript. Enjoy MVC 4 and Orchard CMS, and I do TDD whenever I can. I like clean code. Love to spend time with my wife and our children. My profile on Stack Exchange, a network of free, community-driven Q&A sites

About Anton

shades-of-orange.com code blog logo I'm a software developer at teamaton. I code in C# and work with MVC, Orchard, SpecFlow, Coypu and NHibernate. I enjoy beach volleyball, board games and Coke.