我有两个带有对象的ListBox作为填充它们的ItemsSource。现在,我正在使用DragDropHelper让我将一个对象从一个ListBox拖到第二个ListBox。我运行自定义代码来更改Object上的属性并更新我的两个ListBox对象集合。
但是,现在我希望能够将其中一个对象拖放到窗口中的另一个控件上。但是,我不想一定“掉落”对象。我只是希望外部控件实现(通过引发一个事件)它被一个带有ID的对象所淹没。
总结一下,我有2个列表框。一个列表框是收藏夹,另一个是非收藏夹。我可以高兴地在两个列表框之间拖放,一切正常。现在我想将一个喜欢/不喜欢的东西从列表框中拖出并放到另一个控件上。我希望那个控件简单地说“嘿!我刚收到一个喜欢/不喜欢的对象”。
任何想法?
答案 0 :(得分:0)
去年我做了类似的事情(.NET .3.5)。
如果我在“删除”已经选中并拖动的对象(通过装饰图层)时正确记住,那么您实际上是对所选对象的引用。当该对象被“删除”时,“InstanceDroppedOnUserControlFoo_Handler(... args)”事件处理程序对已被删除的对象具有无类型引用。
通过这种方式,您可以进行投射(如果类型已知)并访问您心中的Id字段。
现在的问题是,drop target用户控件是否与Drag Source的DataContext共享相同的ViewModel?在大多数情况下,如果不是这种情况,您将无法在事件args中获得引用,您将获得null。
如果是这种情况,您将需要浏览这些选项以进行ViewModel通信:
使用MVVM消息传递框架(MVVM Light Framework see Messenger component) 要么 通过WPF棱镜发布子复合事件 - EventAggregator:
然后按照这个过程(或根据您的需求量身定制的东西):
显然,你可以根据自己的需要量身定制参考资料。我将留下最后一个建议,在考虑使用管理这种操作的控制器类时可能是值得的。我看到微软的模式& amp;在WPF CAG (PRISM)样本中与MVVM协调的实践,所以这并非闻所未闻。