我有一個數據網格顯示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寧可不採取那條路線。 –