2016-07-24 68 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