在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);
}
}
}
请解释我哪里出了问题,为什么出了问题。
您正试图静态地强制转换为动态地-确定的类型。
坏消息是:那不管用。静态类型在编译时必须是已知的。
好消息是:绝对不需要这样做:就您的目的而言,将引用存储在通用对象变量中就足够了:
object item = ListView.ItemContainerGenerator.ItemFromContainer(listViewItem);