2011-10-29 9 views
2

私はRelayCommandを使用してボタンのクリックを処理していますが、送信者のパラメータを取得する必要がありますが、常にnullです。RelayCommandでオブジェクトの送信者は常にnullです

ViewModel.cs

private RelayCommand _expandClickCommand; 
    public ICommand ExpandClickCommand 
    { 
     get 
     { 
      if (_expandClickCommand == null) 
      { 
       _expandClickCommand = new RelayCommand(ExpandClickCommandExecute, ExpandClickCommandCanExecute); 
      } 
      return _expandClickCommand; 
     } 
    } 

    public void ExpandClickCommandExecute(object sender) 
    { 
     //sender is always null when i get here! 
    } 
    public bool ExpandClickCommandCanExecute(object sender) 
    { 
     return true; 
    } 

View.xaml

<ListBox ItemsSource="{Binding Path=MyList}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="*"/> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition Height="*"/> 
        <RowDefinition Height="*"/> 
       </Grid.RowDefinitions> 

       <Button Grid.Column="0" Grid.Row="0" Content="Expand" Command="{Binding DataContext.ExpandClickCommand,ElementName=SprintBacklog}"/> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

私はすべての可能性でオブジェクトExpandClickCommand

+0

はたぶん、送信者は、私がしようとすべきか、実際にではありませんget、私はちょうどインデックスが必要です –

答えて

10

でcurrect ListboxItemのインデックスを取得する必要がありないですコントロールによって渡されたCommandParameterである。ボタンのCommandParameterを自分自身にバインドして、senderを認識させることができます。

CommandParameter="{Binding RelativeSource={RelativeSource Self}}" 

(しかし、それは本当に多くは、あなたがそれはあなたがその値を得ることができますに渡すかについて考えることを助けていない可能性があります。)

+0

さて、私は今、送信者オブジェクトで何かを取得していますが、私はインデックスを取得するように見える、私はListBoxで渡すために、そのパラメータを変更しましたが、CurrentItemプロパティは常に0です –

+0

@EamonnMcEvoy: 'CurrentItem'プロパティ?リストボックスにはそのようなプロパティはありません。あなたのコマンドは正確に何をしていますか? XAMLだけのソリューションを手放すことはできませんか? –

+0

@EamonnMcEvoy: 'DataContext'(現在のアイテム)の使用について考えていて、データリストから位置を取得していますか、またはリストの' IndexOf'が間違った値を生成するようなコレクションの上にいくつかのビューがありますか? *(でも、あなたはおそらくそのビューを手に入れ、それから正しいインデックスを得ることができます)* –

関連する問題