2015-03-31 67 views
1

所以我有一个ListView其中包含的MyFilesMyFolders 列表这两个类实现我的接口IExplorerItem如何拖放项目到ListView和检测项目就滴到

现在,我已经建立了我列表视图,这样我可以拖放到它像这样:

<ListView ItemsSource="{Binding DisplayedItems}" AllowDrop="True"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Drop"> 
      <Command:EventToCommand Command="{Binding DropFiles}" PassEventArgsToCommand="True"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</ListView> 

和命令是:

private RelayCommand<DragEventArgs> _dropFiles; 

/// <summary> 
/// Gets the DropFiles. 
/// </summary> 
public RelayCommand<DragEventArgs> DropFiles 
{ 
    get 
    { 
     return _dropFiles 
      ?? (_dropFiles = new RelayCommand<DragEventArgs>(
      args => 
      { 
       if (args.Data.GetDataPresent(DataFormats.FileDrop)) 
       { 
        // Note that you can have more than one file. 
        string[] files = (string[])args.Data.GetData(DataFormats.FileDrop); 
        //do my thing with my files 
       } 
      } 
    } 
} 

所以这适用于拖放文件和处理它们。 但我不想检测文件被丢弃的项目。

例如如果IExplorerItem它被丢弃是一个MyFolder对象,然后将它们添加到该文件夹​​。 这可能吗?

回答

0

明白了,所以在我的RelayCommand我只需要深入了解DragEventArgs类。

private RelayCommand<DragEventArgs> _dropFiles; 

/// <summary> 
/// Gets the DropFiles. 
/// </summary> 
public RelayCommand<DragEventArgs> DropFiles 
{ 
    get 
    { 
     return _dropFiles 
      ?? (_dropFiles = new RelayCommand<DragEventArgs>(
      args => 
      { 
       if (args.Data.GetDataPresent(DataFormats.FileDrop)) 
       { 
        // Note that you can have more than one file. 
        string[] files = (string[])args.Data.GetData(DataFormats.FileDrop); 
        if ((args.OriginalSource as FrameworkElement).DataContext is MyFolder) 
        { 
         //put the files in a folder 
        } 
        else 
        { 
         //do something else 
        } 
       } 
      } 
    } 
}