代码之家  ›  专栏  ›  技术社区  ›  Ralph Shillington

如何使用TreeviewDragDropTarget MVVM

  •  2
  • Ralph Shillington  · 技术社区  · 14 年前

    TreeviewDragDropTarget中似乎有很多“幕后魔法”。

    到目前为止,我看到的所有文章,都停在TreeView的演示文稿上,而没有解释TreeView绑定到的数据集合的情况。

    TreeViewDragDropTargt如何与我的TreeView绑定到的ViewModel属性通信?是否有任何面向MVVM的关于TreeView拖放ALA MVVM的演练或教程?

    更新: "If an item is dropped onto the drag drop target, it is added to the nested control if the nested control is bound to an ObservableCollection (or any collection that implements INotifyCollectionChanged and contains the same type of items as the item that was dropped)."

    这意味着我可以钩住ObservableCollection的CollectionChanged事件,我的TreeView必须保持我的模型同步。

    有更好的选择吗?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Patrice Calvé    12 年前

    到目前为止,我还没有看到更好的选择。记住,MVC/MVP/MVVM模式背后的关键是尽可能多地将代码放入测试中。

    对于拖放,我已使用演示文稿->代码隐藏->Messenger引发消息“已添加项目”…从视图模型捕获事件。

    例如,如果代码背后有自定义逻辑,请验证“源”是否处于有效状态(例如,正确的类型等),您可以将此检查委托给一个“服务”(注入依赖项),该服务专门用于处理这些奇怪的情况。后面的代码变成了miminal,“拖动服务”变成了可测试的。

    您真的需要一个“拖动服务”吗?如果需要,您应该为每个ViewModel提供一个“拖动服务”,还是为每个应用程序提供一个?我会用你的经典答案回答“这要看情况而定”。