silverlight: как передать значение из элемента в списке, нажав кнопку рядом с элементом

#c# #silverlight-4.0 #mvvm #relaycommand #commandparameter

#c# #silverlight-4.0 #mvvm #relaycommand #commandparameter

Вопрос:

У меня есть Listbox, в котором отображается элемент и кнопка удаления рядом с ним. Как я могу запустить команду relay, передающую параметр viewmodel, чтобы я мог выполнить удаление.

Пример кода.

 <ListBox ItemsSource="{Binding Path=CurrentUserRoles, Mode=TwoWay}" SelectedValuePath="Id" Name="lstRoles" Grid.Row="0" >
      <ListBox.ItemTemplate>
           <DataTemplate>
               <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                     <Button Command="{Binding Path=RemoveFromUserRolesCommand, Mode=TwoWay}" Content="Delete">
                     </Button>
                     <TextBlock Text="  "></TextBlock>
                     <TextBlock Text="{Binding Path=Name}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
 </ListBox>
  

Просмотреть модель:

         private RelayCommand _removeFromUserRolesCommand = null;
        public RelayCommand RemoveFromUserRolesCommand
        {
            get
            {
                if (_removeFromUserRolesCommand == null)
                {

                    _removeFromUserRolesCommand = new RelayCommand(
                        () => this.OnARemoveFromUserRolesCommand(),
                        () => (this._adminModel != null) );
                }
                return _removeFromUserRolesCommand;
            }
        }
        private void OnARemoveFromUserRolesCommand()
        {
            try
            {
                if (!_adminModel.IsBusy amp;amp; SelectedAvailableRole != null)
                {
                    ...
                }
            }
            catch (Exception ex)
            {
               ...
            }
        }
  

Но это не работает. Я новичок в Silverlight, так что кто-нибудь сталкивался с подобным сценарием? Можете поделиться?

Ответ №1:

Вы должны использовать отдельную ViewModel для каждого из элементов вашего списка. Внутри вы сохраняете идентификатор элемента. Затем вы помещаете RemoveCommand внутри этой ViewModel и выполняете удаление там, используя идентификатор.