解决WPF的datagrid设置可以多选后,SelectedItem显示为第一个选中的值,而不是当前选中值

文章描述了在使用WPF的MVVM模式构建程序时遇到的问题,即在DataGrid中选中多行后,点击编辑按钮总是传递第一行的数据。解决方案是将CommandParameter改为传递Datacontext而不是SelectedItem。通过修改Button的CommandParameter绑定,可以确保传递当前行的数据上下文。
摘要由CSDN通过智能技术生成

我使用WPF的MVVM模式构建程序如下:

                <DataGridTemplateColumn Header="操作状态" Width="80*">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                                <Button Content="编辑" Name="Bianji" Tag="{Binding}"   Command="{Binding DataContext.EditDataCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"  CommandParameter="{Binding SelelctedItem,ElementName=Datagrid}"/>
                                <Button Content="删除" Name="Shangchu"  Tag="{Binding}" Command="{Binding DataContext.DeleteDataCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"  CommandParameter="{Binding SelelctedItem,ElementName=Datagrid}" Foreground="#FFE01919" />
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

当我选中多条时,在点击某一行的编辑按钮,传出的值是选中的第一行,而不是当前点击编辑的那一行。

解决方法是修改传出的参数,不传SelectedItem,而是Datacontext

<Button x:Name="EditButton"  Command="{Binding DataContext.EditDataCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"  CommandParameter="{Binding DataContext,ElementName=EditButton}"/>
<Button x:Name="DeleteButton" Command="{Binding DataContext.DeleteDataCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"  CommandParameter="{Binding DataContext,ElementName=DeleteButton}">

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值