silverlight:如何通过单击项目旁边的按钮从列表框中的项目传递值

时间:2011-04-08 09:30:49

标签: c# silverlight-4.0 mvvm relaycommand commandparameter

我有一个列表框,旁边显示一个项目和一个删除按钮。如何触发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 && SelectedAvailableRole != null)
                {
                    ...
                }
            }
            catch (Exception ex)
            {
               ...
            }
        }

但它不起作用。我是Silverlight的新手,所以有人经历过这种情况吗?你能分享吗?

1 个答案:

答案 0 :(得分:0)

您应该为列表中的每个项目使用单独的ViewModel。在里面存储元素的ID。然后将RemoveCommand放在那些ViewModel中,并使用ID在那里执行删除。