«указанное приведение недопустимо» GalaSoft.MvvmLight.Command.RelayCommand`1.Execute (параметр объекта) - PullRequest
0 голосов
/ 23 июня 2011

Я довольно новичок в использовании MVVM Light, так что, надеюсь, это простое исправление, хотя я потратил большую часть дня, пытаясь найти ответ: - (

В моем 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

По какой-то причине это вызывает вышеприведенное исключение при нажатии кнопки.

Спасибо

1 Ответ

2 голосов
/ 23 июня 2011

Возможно, это потому, что ваша RelayCommand определена как RelayCommand<int>, и вы пытаетесь присвоить ей RelayCommand<Int32>

Попробуйте вместо этого изменить определение команды на простой ICommand.

Возможно также, что значение равно нулю до начальной привязки. Попробуйте вместо этого использовать объект и не указывать тип.

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

и

public void ViewDocumentText(object iDocumentID)

...