2011-07-01 4 views
5

목록 및 트리 (특정 유형 이름은 관련 없음)와 같은 두 가지 컨트롤이 하나 있습니다.사용자 지정 개체 끌어서 놓기

목록 컨트롤에서 DoDragDrop 메서드를 실행합니다. 첫 번째 인수로서 나는 해당 행에 바인딩 된 데이터 인 객체를 전달합니다. 객체는 특정 인터페이스를 구현하며 Serializable 특성으로 표시됩니다.

내가 원하는 것은 트리 컨트롤의 DragEnter/DragDrop 이벤트 처리기에서 해당 개체를 검색하는 것입니다. 나는 다음과 같은 코드를 사용하고 있습니다 :

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

불행하게도, 결과 데이터가 null과 형식은 (IFoo 구현) 특정 유형의 이름을 유지하는 하나의 요소 배열입니다. 개체를 다시 게시하려면 GetData에 정확한 형식 이름을 전달해야한다고 가정하지만 개인 클래스이므로 불가능합니다.

인터페이스를 통해 개체를 가져 오는 방법이 있습니까?

답변

4

처음에 직렬화 된 클래스와 동일한 유형을 제공해야합니다. 직렬화 된 클래스의 인터페이스 또는 기본 클래스는 형식 중 둘 이상이 일치 할 수 있으므로이를 역 직렬화 할 클래스 또는 클래스를 알 수 없기 때문에 사용할 수 없습니다. IFoo를 모두 구현하는 여러 클래스가 있고 각각의 인스턴스가 데이터 개체 내부에 있으면 IFoo를 묻는 것이 모호합니다. 따라서 데이터 객체에 직렬화 된 정확한 유형을 요청해야합니다.

이것은 데이터 객체에 클래스를 배치하지 말아야한다는 것을 의미합니다. 클래스는 다른 끝에 비공개이기 때문에 직렬화 될 수 없습니다.