WPF MVVM-Light如何在ViewModel中使用传递的DragEventArgs

4

我在这里阅读了许多关于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模式(完全避免使用代码后台)。 需要注意的是,在代码后台中,通常Drop-Event事件处理程序有两个参数:类型为object的发送者和类型为DragEventArgs的e。我只需要EventArgs。 我的问题不再是如何直接从XAML传递DragEventArgs到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类型)。

谢谢您的帮助。

1个回答

5
您需要像这样的东西:
您缺少的是在函数定义中指定您期望的参数类型 :)
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
}

或者以类似于Lambda的方式(我喜欢我的Lambda):

public RelayCommand<DragEventArgs> DragCommand { get; private set; }

public MainViewModel() {
  DragCommand = new RelayCommand<DragEventArgs>((e) =>  /* Handler Code */ , (e) => true);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接