如何访问数据对象中保存的对象?

How do I access object held inside of dataobject?

涉及使用 Gong DragDrop WPF NuGet(但即使没有,也可能不会影响拖放操作的典型功能)。

设置:

  1. 一个处理 ListBox 的 PreviewDrop 事件。
  2. DataObject 变量。
  3. 将 e.Data 分配给 DataObject 变量
  4. 将对象从任意位置拖放到此 ListBox 以触发。
  5. 调试断点以在 Locals 中查看 DataObject。

我需要得到的东西:

拖入其中的 ListBoxItem 的内容或 TreeViewItem 的页眉(Gong 允许您这样做)或拖放到我的 ListBox 中的整个对象。

我可以物理地看到此 DataObject 在其非 Public 成员中包含删除的对象 -> InnerData -> 非 Public 成员 -> 数据 -> 原始视图 -> 值 - > 结果视图 -> (0) -> (0) -> 数据,但我不知道如何访问它。

我试过的:

用 Google 搜索溢出和代码项目,VB.Net 文档,没有找到关于该问题的任何具体内容(或者可能太模糊)。

我尝试使用反射来获取 InnerData 字段,如下所示:

Dim myElement = GetType(DataObject).GetField("innerData", System.Reflection.BindingFlags.NonPublic).GetValue(e.Data), 

但是我得到 System.NullReferenceException: 'Object reference not set to an instance of an object.'.

Dim myInnerData = myData.GetType().GetField("_innerData", Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 

将获取我的 innerData,但是我丢失了“innerData”的“数据”,导致我仍然无法获取附加到 DataObject 的对象。

解决方案比我想象的要简单得多。 Joe 让我以正确的方式开始解释:

你需要让 DataObject.GetFormats 知道你在做什么,复制 GetFormats returns 的字符串,像这样:

Dim myElement = myData.GetFormats

对我来说 returns:

像这样将该字符串传递给 GetData

Dim myInnerData = myData.GetData("GongSolutions.Wpf.DragDrop")

瞧,你刚刚得到了 DragEventArgs 的对象。

据我所知,这是唯一对这个特定问题有答案的主题。