У меня есть дата-схема, которая отображает все записи, которые существуют в таблице базы данных SQL, и я хотел бы добавить одну кнопку в свой пользовательский интерфейс, который позволяет пользователям удалять запись) он выбрал. Большинство ссылок, которые я нашел для этого, вращаются вокруг добавления кнопки удаления в каждую строку или связаны с кодом. Я использую шаблон MVVM, и я не хочу кнопки в каждой строке. В настоящее время я могу удалить одну запись за раз, но вам нужна помощь в том, как выполнять итерацию по выбранным элементам. Мой код выглядит следующим образом:Как удалить несколько выбранных строк на datagrid
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, привязанных к столбцам таблицы.
ViewModel
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 в классе. Затем вы можете перебирать свою коллекцию, удалять элементы из DataSource и уведомлять пользовательский интерфейс об изменении. –
Если доступна возможность выбора нескольких строк с помощью Ctrl + щелчка мыши, я должен поверить, что флажок не нужен, d скорее не возьмите этот маршрут. –