Есть ListBoxсо списком автомобилей
Есть коллекция, в которой находятся данные из БД ObservableCollection Auto;
как сделать удаление нескольких выделенных в ListBox автомобилей?
для удаления 1 авто использую следующий код
public RelayCommand DeleteCommand
{
get
{
return deleteCommand ??
(deleteCommand = new RelayCommand((selectedItem) =>
{
MessageBoxResult result = MessageBox.Show("Вы действительно
желаете удалить элемент?", "Удаление", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (selectedAuto == null || result == MessageBoxResult.No) return;
// получаем выделенный объект
Auto auto = selectedAuto as Auto;
db.Autos.Remove(auto);
db.SaveChanges();
OnPropertyChanged("HasAuto");
}, CanEditOrDeleteAuto));
}
}
Класс Auto выглядит следующим образом(таблица БД выглядит также)
class Auto : INotifyPropertyChanged
{
private string model;
private string marka;
private int cost;
private int maxSpeed;
public int Id { get; set; }
public string Model
{
get
{
return model;
}
set
{
model = value;
OnPropertyChanged("Model");
}
}
public string Marka
{
get
{
return marka;
}
set
{
marka = value;
OnPropertyChanged("Marka");
}
}
public int Cost
{
get
{
return cost;
}
set
{
cost = value;
OnPropertyChanged("Cost");
}
}
public int MaxSpeed
{
get
{
return maxSpeed;
}
set
{
maxSpeed = value;
OnPropertyChanged("MaxSpeed");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
БД получаю таким образом
public class ApplicationContext : DbContext
{
public ApplicationContext() : base("DefaultConnection")
{
}
public DbSet Autos { get; set; }
}
ViewModel
ObservableCollection autos;
private Auto selectedAuto;
public ObservableCollection Autos
{
get { return autos; }
set
{
autos = value;
OnPropertyChanged("Autos");
}
}
public Auto SelectedAuto
{
get
{
return selectedAuto;
}
set
{
selectedAuto = value;
OnPropertyChanged("SelectedAuto");
}
}
public ApplicationViewModel()
{
db = new ApplicationContext();
db.Autos.Load();
Autos = db.Autos.Local;
}
UDP2
разметка
код VM
public ICommand DeleteCommand => new RelayCommand(o => Delete((Collection
Ответы
Ответ 1
У меня работает такой способ, разметка:
В коде VM:
public ICommand DeleteCommand => new RelayCommand(o => Delete((Collection)o));
private void Delete(Collection o)
{
List list = o.Cast().ToList();
list.ForEach(auto => Autos.Remove(auto));
}
Комментариев нет:
Отправить комментарий