我有一个数据网格显示SQL数据库表中存在的所有记录,我想添加一个按钮到我的用户界面,允许用户删除记录)他或她选择了。我发现的大多数参考文献都是围绕每行添加一个删除按钮或者涉及代码。我正在使用MVVM模式,我不想在每一行中都有一个按钮。目前,我可以一次删除一条记录,但需要有关如何遍历所选项目的帮助。我的代码如下:如何删除数据网格上的多个选定的行
XAML
<Button x:Name="revokeBtn"
Grid.Row="0"
Grid.Column="4"
ToolTip="Revoke Selected License or Licenses"
Content="Revoke"
Command="{Binding RevokeSelectedCommand}"
CommandParameter="{Binding}">
</Button>
<DataGrid x:Name="licenseGrid"
ItemsSource="{Binding LoggedUsers}"
SelectedItem="{Binding SelectedLicenses}"
Style="{DynamicResource DataGridStyle}"
Grid.Row="2"
Grid.Column="1"
Grid.ColumnSpan="6"
Height="535"
VerticalAlignment="Top"
IsReadOnly="True"
AutoGenerateColumns="False"
HeadersVisibility="Column"
SelectionMode="Extended"
CanUserDeleteRows="True"
EnableRowVirtualization="False">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</DataGrid.RowStyle>
与被绑定到表列DataGrid.Columns。
视图模型
public ObservableCollection<MD_LoggedUsersModel> LoggedUsers
{
get { return _loggedUsers; }
set { _loggedUsers = value; NotifyPropertyChanged(nameof(LoggedUsers)); }
}
public MD_LoggedUsersModel SelectedLicenses
{
get
{
return _selectedLicenses;
}
set
{
if (_selectedLicenses != value)
{
_selectedLicenses = value;
OnPropertyChanged(nameof(SelectedLicenses));
}
if (_selectedLicenses == null)
{
LoadData();
}
}
}
public bool IsSelected
{
get
{
return _isSelected;
}
set
{
if (_isSelected == value) return;
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
public ICommand RevokeSelectedCommand
{
get
{
return _revokeSelectedCommand ?? (_revokeSelectedCommand = new CommandHandler(() => RevokeSelected(), _canExecute));
}
}
private void RevokeSelected()
{need to iterate through selected rows here}
什么是实现这一目标的最佳方式是什么?
我一直处理选定行的方式是将一个CheckBox列添加到绑定到该类的IsSelected Property的网格中。然后你可以迭代你的集合,从DataSource中移除项目,并通知UI的变化 –
如果能够选择多个行并点击Ctrl +鼠标,我不得不相信复选框不是必需的, d宁可不采取那条路线。 –