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 模式(完全避免后面的代码)。JFYI,在代码隐藏中,Drop-Event 的事件处理程序通常有 2 个参数:object 类型的 sender 和 DragEventArgs 类型的 e。我只需要 EventArgs。我的问题不再是关于如何将 DragEventArgs 从 XAML 直接传递给 ViewModel,而是如何在 ViewModel 中获取和使用 DragEventArgs(c# 代码)。在 ViewModel 我这样写命令:

public RelayCommand<DragEventArgs> DropCommand
{
    get
    {
        return _dropCommand ?? (_dropCommand = new RelayCommand<DragEventArgs>(Drop);
    }
}
private void Drop()
{
   // do something here
}

我想我在 DropCommand 中遗漏了一些东西,所以我可以使用 e(DragEventArgs 的类型)。先感谢您。

4

1 回答 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
}

或者以 lamda'ish 的方式(我确实喜欢我的 lamda):

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

public MainViewModel() {
  DragCommand = new RelayCommand<DragEventArgs>((e) =>  /* Handler Code */ , (e) => true);
}
于 2013-04-18T16:04:36.213 回答