我在这里读了很多关于WPF MVVM Light的问题和答案,但答案大多只显示了一面(XAML代码见下文),根本没有ViewModel代码。
<i:Interaction.Triggers>
<i:EventTrigger EventName="Drop">
<cmd:EventToCommand Command="{Binding Mode=OneWay, Path=DropCommand}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
我在XAML Grid-Control中使用,我想将拖放文件从windows资源管理器应用到我的(wpf)应用程序。我严格使用MVVM模式(完全避免后面的代码)。JFYI,在后台代码中,Drop-Event的事件处理程序通常有2个参数:object类型的sender和DragEventArgs类型的e。我只需要EventArgs。我的问题不是关于如何将DragEventArgs从XAML直接传递到ViewModel,而是如何在ViewModel (c#代码)中获取和使用DragEventArgs。在ViewModel中,我这样写命令:
public RelayCommand<DragEventArgs> DropCommand
{
get
{
return _dropCommand ?? (_dropCommand = new RelayCommand<DragEventArgs>(Drop);
}
}
private void Drop()
{
// do something here
}
我想我错过了一些在我的DropCommand,所以我可以使用e(类型的DragEventArgs)。
您需要这样的内容:
你缺少的是在你的函数定义中指定你期望的参数类型:)
private RelayCommand<DragEventArgs> _dropCommand;
public RelayCommand<DragEventArgs> DropCommand {
get {
return _dropCommand ?? (_dropCommand = new RelayCommand<DragEventArgs>(Drop));
}
}
private static void Drop(DragEventArgs e) {
// do something here
}
或者用lamda的方式(我喜欢我的lamda的方式):
public RelayCommand<DragEventArgs> DragCommand { get; private set; }
public MainViewModel() {
DragCommand = new RelayCommand<DragEventArgs>((e) => /* Handler Code */ , (e) => true);
}