【问题标题】:How do I access object held inside of dataobject?如何访问数据对象中保存的对象?
【发布时间】:2022-01-03 01:35:11
【问题描述】:

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

设置:

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

我需要得到什么:

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

我可以实际看到这个 DataObject 在其非公共成员 -> InnerData -> 非公共成员 -> 数据 -> 原始视图 -> 值 -> 结果视图 -> (0) -> 中包含放置的对象(0) -> 数据,但我不知道如何访问它。

我尝试过的:

谷歌搜索溢出和代码项目,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的对象。

【问题讨论】:

  • 我尝试使用反射来获取 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.'.
  • 在任何你想检查DragEventArgs.Data成员的拖动处理程序中。它应该能够告诉您您拥有什么数据类型。在我的情况下,我调用e.Data.GetDataPresent 并给它DataFormats.FileDrop 字段,因为这是我的处理程序期望的类型。如果你不知道你的处理程序接收的是什么类型,我建议你打电话给IDataObject.GetFormats 看看里面有什么。
  • @Joe 没有返回任何可用的值(可能是由于龚 WPF),您不知道如何访问 NonPublic InnerData 字段?用反射查看我的评论,也许我在那里做错了什么,但如果我设法阅读该字段,我可以以某种方式获得我的对象。

标签: c# wpf vb.net


【解决方案1】:

解决方案比我想象的要简单得多。乔一开始就向我发送了正确的方法来解释:

您需要获取DataObject.GetFormats 以了解您正在使用什么,复制GetFormats 返回的字符串,如下所示:

Dim myElement = myData.GetFormats

对我来说返回:

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

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

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

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

【讨论】:

  • 很高兴听到你成功了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2011-01-12
  • 1970-01-01
相关资源
最近更新 更多