2016-07-24 70 views
1

我正在构建一个自定义控件,该控件允许我在控件之间拖放。我遵循This,直到我想要允许多种类型,我一直在那里。因此,我可能希望在客户表单中使用此工具,并在两个客户ListViewsEmployee表单之间拖动,并在两个员工表单之间拖动。在ListView项中获取泛型类型

由于某些原因,我无法投射为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); 
      } 
     } 
    } 

回答

1

请解释一下我要去的地方错了,这是为什么。

您正在尝试静态强制转换为动态确定的类型。

坏消息:这是行不通的。编译时必须知道静态类型。

好消息是:绝对没有需要做到这一点:你的目的,存储在一个通用对象变量的引用就足够了:

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

感谢您的答复,我认为我应该检查在下降,它是同一类型?如果是这样,我该怎么做? – JamTay317

+0

@ JamTay317:与什么类型相同? – Heinzi

+0

我想确保我拖动的列表视图(可以说itemSource IEnumerable )和我拖动到的listView有一个ItemSource IEnumerable 而不是IEnumerable JamTay317