2011-07-01 211 views
5

我有2個控件一個形式:列表和樹(特定類型名稱是無關緊要的)。拖放自定義對象

在列表控件中,我執行DoDragDrop方法。作爲第一個參數,我傳遞一個數據綁定到該行的對象。該對象實現了一個特定的接口並用Serializable屬性標記。

我想要的是在樹控件的DragEnter/DragDrop事件處理程序中檢索該對象。我使用以下代碼:

void TreeControlDragEnter(object sender, DragEventArgs e) 
{ 
    var formats = e.Data.GetFormats(); 
    var data = e.Data.GetData(typeof (IFoo)); 
} 

不幸的是,在結果數據爲空和格式是保持(實施的IFoo)特定類型的名稱的一個元素的數組。我假設我必須將確切的類型名稱傳遞給GetData才能撤回該對象,但這不可能,因爲它是私有類。

有沒有辦法通過接口獲取對象?

回答

4

您必須提供與首先序列化的類相同的類型。您不能使用序列化類的接口或基類,因爲然後有多種格式可能會匹配它,並且它不知道要反序列化哪個格式。如果你有幾個全部實現IFoo的類,並且每個數據對象中都有一個實例,那麼要求IFoo將是不明確的。所以你必須要求序列化到數據對象中的確切類型。

這意味着您不應將類放入無法反序列化的數據對象中,因爲它們在另一端是私有的。