Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

MVVM WPF удаление нескольких выбранных элементов

#c_sharp #wpf #mvvm


Есть 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
разметка