ListView:从ListViewItem获取实际的项目对象

Vio*_*ffe 3 c# wpf listview

我将自己的类的项目添加到ListView(列表视图已适当设置绑定):

_listView.Items.Add(new ProblemsListItem());
Run Code Online (Sandbox Code Playgroud)

我有一个MouseDoubleClick处理程序,它获取ListViewItem被单击的:

void onProblemDoubleClick(object sender, MouseButtonEventArgs e)
{
    ListViewItem item = FindVisualParent<ListViewItem, ListView>(e.OriginalSource as DependencyObject);
}

public static TParent FindVisualParent<TParent, TLimit>(DependencyObject obj) where TParent : DependencyObject
{
    while (obj != null && !(obj is TParent))
    {
        if (obj is TLimit)
            return null;
        obj = VisualTreeHelper.GetParent(obj);
    }
    return obj as TParent;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何将其转换ListViewItem为我的ProblemsListItem对象,或从项目中获取该对象?

我尝试过继承ProblemsListItem自ListViewItem. 当然,我可以在处理程序中转换item为ProblemsListItem类型,但这完全破坏了 ListView:所有列都是空的,没有正确填充。

Den*_*nis 5

您可以使用ItemContainerGenerator来获取数据项:

var dataItem = yourListView.ItemContainerGenerator.ItemFromContainer(yourListViewItem);
Run Code Online (Sandbox Code Playgroud)

但这段代码有味道。我看不出有任何理由不使用数据绑定,并在执行执行时处理双击ICommand。