在ListView项中获取泛型类型

本文关键字:获取 泛型类型 ListView | 更新日期: 2023-09-27 17:58:20

我正在构建一个自定义控件,它将允许我在控件之间拖放。我一直遵循这一点,直到我想允许多种类型。因此,我可能想在客户表单中使用它,并在两个客户ListViews之间拖动,或者在Employee表单中使用,并在两家员工表单之间拖动。

由于某些原因,我无法转换为Type。请解释我哪里出了问题,为什么出了问题。非常感谢。

    private void OnMouseMove(object sender, MouseEventArgs e)
    {
        Point mousePos = e.GetPosition(null);
        Vector diff = _startPoint - mousePos;
        if (e.LeftButton == MouseButtonState.Pressed &&
            Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance ||
            Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
        {
            if (ListView != null)
            {
                ListViewItem listViewItem =
                    FindAnchestor<ListViewItem>((DependencyObject) e.OriginalSource);
                Type itemType = ListView.ItemContainerGenerator.ItemFromContainer(listViewItem).GetType();
                var item = (itemType)ListView.ItemContainerGenerator.ItemFromContainer(listViewItem);
            }
        }
    }

在ListView项中获取泛型类型

请解释我哪里出了问题,为什么出了问题。

您正试图静态地强制转换为动态地-确定的类型。

坏消息是:那不管用。静态类型在编译时必须是已知的。

好消息是:绝对不需要这样做:就您的目的而言,将引用存储在通用对象变量中就足够了:

object item = ListView.ItemContainerGenerator.ItemFromContainer(listViewItem);