2013-04-18 120 views
3

這裏我已經閱讀了許多有關WPF MVVM Light的問題和答案,但答案顯示的主要只有一面(XAML代碼見下文),並且沒有ViewModel代碼在所有。WPF MVVM-Light如何在ViewModel中使用傳遞的DragEventArgs

<i:Interaction.Triggers> 
<i:EventTrigger EventName="Drop"> 
    <cmd:EventToCommand Command="{Binding Mode=OneWay, Path=DropCommand}" 
         PassEventArgsToCommand="True" /> 
</i:EventTrigger> 

我在XAML中網格控制使用,我想從Windows資源管理器應用將&文件拖放到我的(WPF)應用程序。我嚴格使用MVVM模式(避免完全隱藏代碼)。 JFYI,在代碼隱藏中,通常Drop事件的事件處理函數有兩個參數:對象類型的sender和DragEventArgs類型的e。我只需要EventArgs。 我的問題不是關於如何將XAML中的DragEventArgs直接傳遞給ViewModel,而是如何獲取和使用ViewModel中的DragEventArgs(c#代碼)。在視圖模型我寫的命令是這樣的:

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

我想我想念我的DropCommand東西,這樣我就可以使用E(類型DragEventArgs的)。 預先感謝您。

回答

4

你需要的東西,如:

你缺少的就是在你的函數定義什麼指定參數鍵入您希望:)

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); 
} 
相關問題