2016-06-13 56 views
6

我試圖通過拖放功能上傳文件。我成功地完成了UI工作,但是我無法訪問在後端放置的對象。如果我確實在代碼後面,我能夠成功地獲取對象,但我試圖採用MVVM方法。使用Caliburn拖放文件MVVM

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); 
} 

我已經試過EventArgs的,我無法找到該文件對象的屬性。代碼測試時,DragEventArgs爲null。背後代碼

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); 
    } 
} 

回答

6

您可以使用EventTriggerBehavior

工作方案。你會派遣「放下事件」給一個命令。可能你需要一個轉換器來處理事件參數。這裏是一個使用listview的例子。

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

</core:EventTriggerBehavior> 

這裏是一些鏈接,其解釋相同的方法:

4

檢查出來卡利的文件,這是我從來沒有使用過,看來你'缺少事件和行動:

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

根據文檔中的備忘單http://caliburnmicro.com/documentation/cheat-sheet

+0

不,但我只是想幫忙。我甚至在評論中這樣說,我沒有。你讀過我寫的嗎? –