отправитель объекта всегда равен нулю в RelayCommand - PullRequest
2 голосов
/ 30 октября 2011

Я использую RelayCommand для обработки нажатия кнопки, мне нужно получить параметр отправителя, но он всегда равен нулю, есть идеи почему?

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>

Мне нужно получить индекс точного ListboxItem в ExpandClickCommand

1 Ответ

10 голосов
/ 30 октября 2011

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

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

(Но это не очень поможет вам, так что подумайте о том, что вы передаете, что поможет вам получить это значение.)

...