Получить последний элемент из коллекции множественных выборок, удерживая нажатой левую кнопку мыши - PullRequest
0 голосов
/ 05 марта 2019

У меня есть приложение WPF MVVM, основанное на ListView.У меня есть небольшая дилемма, которую я описал в следующих шагах:

  1. Я выбираю несколько записей с помощью Ctrl + левая кнопка мыши.Информация о последней записи всегда отображается.
  2. Я нажимаю Ctrl + левую кнопку мыши на последней записи и продолжаю удерживать кнопку мыши.Отображается информация о первой записи.
  3. Я отпускаю кнопку мыши, и отображается информация о последней записи.

Я обнаружил, что «Поскольку у меня есть выбор нескольких элементов, SelectedItem всегда будетпервый выбран в моем выборе. "

Могу ли я переопределить поведение и установить для Selecteditem последний элемент сразу?Если да, не могли бы вы дать мне несколько советов, как этого добиться?Я буду очень благодарен.

XAML:

 <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding SelectionChanged}" CommandParameter="{Binding ElementName=EmployeeListView, Path=SelectedItems}"/>
                </i:EventTrigger>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <i:InvokeCommandAction Command="{Binding ClickCommand}" CommandParameter="{Binding ElementName=EmployeeListView, Path=SelectedItems}"/>
                </i:EventTrigger>

Метод щелчка:

public void ClickMethod(object parameter)
        {
            IList selection = (IList)parameter;

            if (Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            if (SelectedEmployee == null)
            {
                IndexesOfSelectedEmployees.Clear();
                CountOfSelectedEmployees = 0;
                DynamicSearchEmployeeName = String.Empty;
                DynamicSearchEmployeeID = String.Empty;
                DynamicSearchEmployeeSalary = String.Empty;
                DynamicSearchEmployeeDesigner = String.Empty;
                DynamicSearchEmployeeEmailID = String.Empty;
            }

            if (SelectedEmployee != null)
            {
                foreach (Employee item in Employees)
                {
                    if (item.IsSelected == true)
                    {
                        IndexesOfSelectedEmployees.Add(Employees.IndexOf(item));
                    }
                    if (item.IsSelected == false)
                    {
                        IndexesOfSelectedEmployees.Remove(Employees.IndexOf(item));
                    }
                }

                SelectedEmployee = Employees[IndexesOfSelectedEmployees.Last()];

                foreach (int itemIndexesOfSelectedEmployees in IndexesOfSelectedEmployees)
                {
                    foreach (Employee itemEmployees in Employees)
                    {
                        if (itemIndexesOfSelectedEmployees == Employees.IndexOf(itemEmployees))
                        {
                            itemEmployees.IsSelected = true;
                        }
                    }
                }
                CountOfSelectedEmployees = selection.Count;
            }
        }
        else if (!IndexesOfSelectedEmployees.Any())
        {
            IndexesOfSelectedEmployees.Clear();
            IndexesOfSelectedEmployees.Add(SelectedIndex.GetValueOrDefault());
            CountOfSelectedEmployees = selection.Count;
        }
        else if (IndexesOfSelectedEmployees.Any())
        {
            if (IndexesOfSelectedEmployees.Count == 1 && IndexesOfSelectedEmployees.Contains((int)SelectedIndex))
            {
                //IndexesOfSelectedEmployees.Add(Employees.IndexOf(SelectedEmployee));
                SelectedEmployee = null;
                CountOfSelectedEmployees = 0;
                IndexesOfSelectedEmployees.Clear();
                DynamicSearchEmployeeName = String.Empty;
                DynamicSearchEmployeeID = String.Empty;
                DynamicSearchEmployeeSalary = String.Empty;
                DynamicSearchEmployeeDesigner = String.Empty;
                DynamicSearchEmployeeEmailID = String.Empty;
            }
            else if (IndexesOfSelectedEmployees.Count == 1 && !IndexesOfSelectedEmployees.Contains((int)SelectedIndex))
            {
                IndexesOfSelectedEmployees.Clear();
                IndexesOfSelectedEmployees.Add(SelectedIndex.GetValueOrDefault());
                CountOfSelectedEmployees = 1; 
            }
            else if (IndexesOfSelectedEmployees.Count != 1)
            {
                IndexesOfSelectedEmployees.Clear();
                IndexesOfSelectedEmployees.Add(SelectedIndex.GetValueOrDefault());
                SelectedEmployee = Employees[IndexesOfSelectedEmployees.Last()];
                foreach (int itemIndexesOfSelectedEmployees in IndexesOfSelectedEmployees)
                {
                    foreach (Employee itemEmployees in Employees)
                    {
                        if (itemIndexesOfSelectedEmployees == Employees.IndexOf(itemEmployees))
                        {
                            itemEmployees.IsSelected = true;
                        }
                        if (itemIndexesOfSelectedEmployees != Employees.IndexOf(itemEmployees))
                        {
                            itemEmployees.IsSelected = false;
                        }
                    }
                }
                CountOfSelectedEmployees = selection.Count;
            }
        }


    }

Метод SelectionChanged:

    public void OnSelectionChanged(object parameter)
            {
                IList selection = (IList)parameter;

                if ((Keyboard.IsKeyDown(Key.LeftCtrl) && (Keyboard.IsKeyDown(Key.A))) == true || (Keyboard.IsKeyDown(Key.LeftShift) && Keyboard.I

sKeyDown(Key.Up)) || (Keyboard.IsKeyDown(Key.LeftShift) && Keyboard.IsKeyDown(Key.Down)))
            {
                CountOfSelectedEmployees = selection.Count;

                foreach (Employee item in selection)
                {
                    IndexesOfSelectedEmployees.Add(Employees.IndexOf(item));
                }                
                foreach (int itemIndexesOfSelectedEmployees in IndexesOfSelectedEmployees)
                {
                    foreach (Employee itemEmployees in Employees)
                    {
                        if (itemIndexesOfSelectedEmployees == Employees.IndexOf(itemEmployees))
                        {
                            itemEmployees.IsSelected = true;
                        }
                    }
                }
            }
        }

enter image description here

1 Ответ

0 голосов
/ 08 марта 2019

Я нашел решение. Вы должны вернуть коллекцию IndexesOfSelectedEmployees, и она работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...