WPF MVVM 实现Button按钮删除选中的DataGrid的某一行

本文介绍了如何在WPF应用中实现数据绑定的删除功能。通过DataGrid展示数据,并绑定删除按钮触发RelayCommand,当点击删除按钮时,从数据库中删除选中项并更新UI。同时,注意到DataGrid.SelectedItem不能直接绑定,否则可能导致数据刷新问题。
摘要由CSDN通过智能技术生成

代码如下:

删除按钮前端代码:

<Button Content="删除" Background="#F39DA6" FontSize="12" Margin="5" Width="65" Height="33">
	<Button.Template>
		<ControlTemplate TargetType="{x:Type Button}">
			<Border BorderThickness="1" CornerRadius="3" Background="{TemplateBinding Background}">
				<ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center"/>
			</Border>
		</ControlTemplate>
	</Button.Template>  <!-- Button.Template定义了button的样式 -->
	<b:Interaction.Triggers>
		<b:EventTrigger EventName="Click">
			<b:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local:ManagerView}}, Path=DataContext.DeleteManagerCommand}"
                                                   CommandParameter="{Binding}"/>
		</b:EventTrigger>
	</b:Interaction.Triggers>
</Button>

DataGrid前端代码:

<DataGrid x:Name="dataGrid" Grid.Row="1" ItemsSource="{Binding Managers}" AutoGenerateColumns="False"
                       CanUserAddRows="False" ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}" ColumnWidth="*">
	<DataGrid.Columns>  <!-- ItemSource:表示DataGrid绑定的源 CanUserAddRows=False可以删除DataGrid自动创建的空白行 -->
		<DataGridTextColumn Header="用户名" Binding="{Binding manager_name}"/>
		<DataGridTextColumn Header="账号" Binding="{Binding manager_id}"/>
		<DataGridTextColumn Header="年龄" Binding="{Binding age}"/>
		<DataGridTextColumn Header="性别" Binding="{Binding sex}"/>
		<DataGridTextColumn Header="电话" Binding="{Binding telephone, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
		<DataGridTextColumn Header="密码" Binding="{Binding password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
	</DataGrid.Columns>
</DataGrid>

删除按钮绑定的Command后端ViewModel代码:

public RelayCommand<object> DeleteManagerCommand
{
	get
	{
		return new RelayCommand<object>((arg) =>
		{
			var Model = AppData.Instance.DataGrid.SelectedItem as manager;  //AppData.Instance.DataGrid.SelectedValue表示鼠标当前选中的DataGrid的某一行
			//AppData.Instance.DataGrid是定义在APPData类中的属性,该属性的值是在定义DataGrid控件(窗体)的构造函数中获取的,如下所示
			//AddData.Instance,DataGrid = dataGrid;  dataGrid是前端定义的DataGrid的名称
			var count = new ManagerProvider().Delete(Model);
			if (count > 0)
			{
				MessageBox.Show("删除成功", "提示");
			}
			Managers = new ManagerProvider().Select();  //刷新DataGrid
		});
	}
}

注意:DataGrid的SelectedItem属性不能绑定值,不然删除数据时,数据库会正常删除,但是DataGrid会被清空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值