2011-06-13 59 views
1

我有以下代碼處理由拇指控件拋出的鼠標拖動事件。它適用於背後的標準代碼,如SettingView.xaml和SettingView.xaml.csWPF mvvm傳遞(使用命令)和接收視圖和視圖模型之間的事件和eventargs參數

但我如何處理這在我的SettingViewModel.cs文件。

到目前爲止,我能夠使用接受參數的DelegateCommand(或RelayCommand)連線點擊,但是如何從事件發送的參數獲取輸入?例如,拖動事件提供事件參數e.Horizo​​ntalChange和e.VerticalChange。請看下面我的代碼原型。

任何優雅的解決方案,非常感謝。

在此先感謝。

============================================== ==================================== SettingView.xaml

Thumb Name =「thumbWest」 DragDelta =「thumbWest_DragDelta

SettingView.xaml.cs

private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
    { 
     _captureMargin.Left = _captureMargin.Left + e.HorizontalChange; 

     if (e.HorizontalChange < 0) 
     { 
      // Drag towards West 
      _widthRect = _widthRect + Math.Abs(e.HorizontalChange); 
     } 

     if (e.HorizontalChange > 0) 
     { 
      // Drag towards East 
      _widthRect = _widthRect - e.HorizontalChange; 
     } 

}

回答

1

關於通過直接綁定在命令宣佈擺脫後面的代碼的MVVM會談ViewModel到視圖。這適用於像Button這樣的控件,它們具有可綁定命令的ICommand屬性。但在所有其他情況下,如果控件沒有公開ICommand,或者我們想要在perticualr事件上發生特定行爲,我使用以下兩種方法之一:

1 - 如果我想要一個簡單的方法,從事件處理程序中調用ViewModel命令(RelayCommand)哪個特定的參數。在你的情況下,代碼看起來就像這樣 -

private void thumbWest_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e) 
{ 
    viewModel.DoSomthingCommand.Execute(new DoSomethingCommandParam(e.HorizontalChange)) 
} 

雖然我們將代碼添加到這裏後面的代碼我覺得這是好的,因爲我們沒有在偶數處理程序中添加任何UI邏輯。它只是在ViewModel中使用適當的參數執行Command。

2 - 如果我完全反對將任何代碼放在代碼後面,我將創建一個附加行爲來處理拖放並將其附加到控件。然後從附加行爲調用ViewModel命令。 你可以找到一個關於使用附加行爲的好教程here

+0

感謝您回覆蘇維克。 對於第一種方法,我沒有在我的用戶控件中的Viewmodel的實例,因爲我遵循在Viewmodel和View之間使用XAML的框架Josh Smith示例。儘管在我的框架中我很難確定我是否能夠通過這條道路。 對於第二個,我無法理解應該如何使用xaml。你能在這裏提供一些XAML代碼的原子球原型嗎? – 2011-06-14 08:22:34

+0

我會給你一段時間如何使用第二種方法的例子。關於第一個,ViewModel必須是View的DataContext。因此,您可以通過將UserControl \ Window(View)的DataContext屬性強制轉換爲ViewModel的類並使用它來獲取ViewModel。 – 2011-06-14 08:52:00

+0

乾杯Souvik,第一種方法工作正常,雖然它的臨時工作,因爲它擊敗了使用MVVM分層的目的。實際上,我可以將該方法公開並直接從viewmodel對象的實例中調用它。 現在我將再次嘗試AttachedBehaviour – 2011-06-14 13:57:55

相關問題