我在视图中有一些重复的代码,它们是拖放操作的一部分。我在 ViewModelBase 上有一个 ICommand,它处理模型上所需的拖放操作。由于我试图避免将 UI 事件参数传递给 ViewModel,因此我需要创建自己的参数类型以传递给 DropCommand。所以基本上我在 View 后面的代码看起来是这样的:
// get data required for ordering operation
var args = MyHelperClass.OnDropCompleted(a); // where a is an argument from UI drop event
// execute command
if (args != null) ViewModel.DropCommand.Execute(args);
这工作正常,但是,此代码在每个视图上重复。我的想法是将 DropCommand 添加到我的自定义 UI 控件中,这样我就可以在 xaml 中分配一个 ICommand 绑定
DropCommand={Binding DropSommand} <-- binds to ViewModel's DropCommand
现在,我可以在我的自定义 UI 控件中处理 drop 事件,并在 viewmodel 上调用命令并将计算的参数传递给它。
问题:
1) 只有在 xaml 中设置了 DropCommand 的绑定时,我才想订阅 Drop 操作。我如何检查是否设置了此绑定?
2) 创建要传递给 ViewModel 的 ICommand 的参数后,我想从代码中调用此命令。我怎样才能做到这一点?
编辑:我也有以下绑定场景:
DropCommand={Binding DataContext.DropCommand, elementName=window}