2012-02-01 105 views
0

我嘗試通過EventToCommand發送命令,其中包含以下可視化樹。 可視情況如下:MVVM Light中的EventToCommand問題

<Border Background="Gray" Grid.Row="0" Margin="2" VerticalAlignment="Bottom"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="MouseDown"> 
        <cmd:EventToCommand 
       Command="{Binding ShowVideosCmd}" 
       PassEventArgsToCommand="True" 
       CommandParameter="{Binding Videos}"> 
        </cmd:EventToCommand> 

       </i:EventTrigger> 
      </i:Interaction.Triggers> 
</Border> 

當其中命令連接到我得到以下彈出錯誤邊界點擊:

「‘’類型的未處理的異常發生 在GalaSoft.MvvmLight.WPF4.dll

其他信息:無法轉換類型 「System.Windows.Input.MouseButtonEventArgs」的目的是鍵入 「System.Windows.DependencyO bject」。 「

我的命令,然後在viemModel創建如下:

ShowVideosCmd = new RelayCommand<DependencyObject>(
    (dpObj) => 
      { 
       messenger.Default.Send<string>("ShowVideos"); 
      }, 
    (dpObj) => true 
); 

我做了什麼錯

回答

4

的錯誤信息是非常自我解釋:在你你預計RelayCommand<DependencyObject>命令參數爲DependencyObject,但您的MouseButtonEventArgs正常,因爲您已訂閱MouseDown事件。

T他EventToCommand當事件觸發它exectues與下列參數的一個命令:

  • 如果CommandParameter的值是null它使用它作爲參數,因此命令應該是:RelayCommand<typeOfTheSpecifiedCommandPameter>
  • 如果PassEventArgsToCommand='true' CommandParameter的值是null它使用eventargs作爲命令 參數。所以你需要將你的命令定義爲 RelayCommand<MouseButtonEventArgs>
  • 如果PassEventArgsToCommand='false'CommandParameternull不執行命令的。

注:

所以,你需要定義不同的命令爲兩種情況。在需要時您必須使用RelayCommand<object>並檢查參數類型。這就是爲什麼我認爲在同一時間使用PassEventArgsToCommandCommandParameter是不好的做法。

回到例外:

在你的情況接縫CommandParameter="{Binding Videos}"返回null,這就是爲什麼你得到的MouseButtonEventArgs用作命令參數。

要找出爲什麼{Binding Videos}爲空,您可以在運行時查看VS中的輸出窗口以查找綁定錯誤。

相關問題