2016-06-13 19 views
6

Sto cercando di caricare i file tramite la funzionalità di trascinamento della selezione. Sono riuscito a completare il lavoro dell'interfaccia utente, ma ho problemi ad accedere all'oggetto che è stato rilasciato nel back-end. Sono stato in grado di afferrare l'oggetto con successo se avessi fatto dietro codice ma sto provando a prendere l'approccio MVVM.Trascina e rilascia i file MVVM con Caliburn

AttachmentView.xaml

Cal:Message.Attach="[Drop] = [SaveFile($eventArgs)]" 

AttachmentViewModel.cs

public virtual async void SaveFile(DragEventArgs e) 
{ 
     var fileStream = new FileStream([File name goes here], FileMode.Open, FileAccess.Read); 
} 

Ho provato EventArgs, non riuscivo a trovare la proprietà oggetto file. DragEventArgs è nullo quando viene testato il codice.

Soluzione di lavoro per dietro il codice

AttachmentView.xaml.cs

private void ImagePanel_Drop(object sender, DragEventArgs e) 
{ 

    if (e.Data.GetDataPresent(DataFormats.FileDrop)) 
    { 
     // Note that you can have more than one file. 
     string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 

     // Assuming you have one file that you care about, pass it off to whatever 
     // handling code you have defined. 
     Upload(files); 
    } 
} 

risposta

6

È possibile utilizzare un EventTriggerBehavior. Spedirai "Drop Event" a un comando. Probabilmente avrai bisogno di un convertitore per gli argomenti dell'evento. Ecco un esempio usando un listview.

<core:EventTriggerBehavior EventName="SelectionChanged"> 
     <core:InvokeCommandAction InputConverter="{StaticResource SelectionChangedConverter}" 
     InputConverterParameter="{Binding ElementName=CapturasListView}" 
     Command="{Binding OpenCapturaCommand}" /> 

</core:EventTriggerBehavior> 

Ecco alcuni link che spiegano lo stesso approccio:

4

Verificando la documentazione per Caliburn, che non ho mai usato, vi appare Mancano eventi e azioni:

Cal:Message.Attach="[Event Drop] = [Action SaveFile($eventArgs)]" 

Secondo la documentazione qui cheat http://caliburnmicro.com/documentation/cheat-sheet

+0

No, ma stavo solo cercando di aiutare. L'ho anche detto nel mio commento che non l'ho fatto. Hai letto quello che ho scritto? –