2011-06-23 68 views
0

我很新使用MVVM Light,所以希望這是一個簡單的修復,雖然我已經花了大部分時間試圖追查:-(「指定的投射無效」GalaSoft.MvvmLight.Command.RelayCommand`1.Execute(對象參數)

的答案在我的XAML

<sdk:DataGrid Name="m_dgResults" AutoGenerateColumns="False" IsReadOnly="True" AreRowDetailsFrozen="True" SelectionMode="Single" ItemsSource="{Binding SearchResults}" > 

. 
. 
. 

<Button x:Name="cmdFTSViewText" Width="24" Height="24" Margin="5" ToolTipService.ToolTip="View Text"> 
    <Image Source="../Images/ViewDocumentText.png" Stretch="None"/> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <cmd:EventToCommand Command="{Binding Source={StaticResource Locator}, Path=FindModel.ViewDocumentTextCommand}" 
           CommandParameter="{Binding iUniqueID}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

在我的ViewModel

public RelayCommand<int> ViewDocumentTextCommand { get; private set; } 
public FindModel() 
{ 
    . 
    . 
    . 
    ViewDocumentTextCommand = new RelayCommand<Int32>(p => { ViewDocumentText(p); }); 
} 

public void ViewDocumentText(Int32 iDocumentID) 
{ 
    . 
    . 
    . 
} 

SearchResults.iUniqueID是一個Int32

出於某種原因,當按下按鈕時,會引發上述異常。

感謝

+0

可能重複http://stackoverflow.com/questions/2306063/canexecute-on-relaycommandt-not-工作) – Jehof

回答

2

也許是因爲你的RelayCommand被定義爲RelayCommand<int>和你想分配RelayCommand<Int32>

試着改變你的命令定義爲一種簡單的ICommand代替。

也可能是在初始綁定之前該值爲null。嘗試使用對象,而不是指定類型。

new RelayCommand(p => ViewDocumentText(p));

和[CanExecute上RelayCommand 不工作(

public void ViewDocumentText(object iDocumentID)

+0

感謝您的指點。 /不是問題。這只是我在報告問題時的錯誤。我一直在想這兩個變種診斷問題,忘記了在發佈前1周更多的時間來按撤消:$ 在 – Richard

+0

代代入 ViewDocumentTextCommand =新RelayCommand (P => {ViewDocumentText(P);}); 得到的代碼工作,並允許我診斷問題,但:-) 原來,我的Int32結束爲xaml中的字符串。我現在想的是與Silverlight.DataSet.DataView對象的GetBindableData成員有關。再次感謝。 – Richard

+0

XAML中的字符串不會自動正確轉換,實際上這很難實現。我打算在未來的MVVM Light版本中嘗試使其更好,但這並不容易。乾杯! – LBugnion

相關問題