WPF - Реализация списка, который позволяет перемещать элементы вверх и вниз - PullRequest
2 голосов
/ 11 января 2009

Это связано с моим последним постом.

я хочу иметь кнопки вверх и вниз для элементов списка так что они могут двигаться вверх / вниз, т.е. изменили свой индекс в списке.

Есть идеи, как бы я на самом деле это сделал?

Malcolm

Ответы [ 7 ]

3 голосов
/ 19 марта 2009

Использование ObservableCollection в качестве коллекции для вашего ListBox

ObservableCollection имеет изящный Move метод, который запускает все хорошие события для вашего списка:

3 голосов
/ 11 января 2009

Я бы сделал кнопку, которая является кнопкой вверх, и в событии OnClick сделайте что-то вроде:

int location = listItems.SelectedIndex;
if (location > 0)
{
    object rememberMe = listItems.SelectedItem;
    listItems.Items.RemoveAt(location);
    listItems.Items.Insert(location - 1, rememberMe);
    listItems.SelectedIndex = location - 1;
}

Имейте в виду, что это не проверено, так как у меня сейчас нет открытой студии, но это должно дать вам хорошую идею.

1 голос
/ 30 августа 2011

Переместить вверх

int index = listbox.SelectedIndex;
if (index != -1)
{
    if (index > 0)
    {
        ListBoxItem lbi = (ListBoxItem)listbox.Items[index];
        listbox.Items.RemoveAt(index);
        index--;
        listbox.Items.Insert(index, lbi);
        listbox.SelectedIndex = index;
        listbox.ScrollIntoView(lbi);
    }
}

Движение вниз

int index = listbox.SelectedIndex;
if (index != -1)
{
    if (index < listbox.Items.Count - 1)
    {
        listboxlbi = (ListBoxItem)listbox.Items[index];
        listbox.Items.RemoveAt(index);
        index++;
        listbox.Items.Insert(index, lbi);
        listbox.SelectedIndex = index;
        listbox.ScrollIntoView(lbi);
    }
}
1 голос
/ 11 января 2009

Я бы включил порядок элемента в модель (т. Е. Ваш класс данных). Затем я бы связал ListBox с CollectionView, который отсортирован по этому значению. Затем ваши кнопки вверх / вниз просто меняют значение этого свойства сортировки на два элемента данных.

0 голосов
/ 26 марта 2012

Если вы связываете это:

private void MoveItemUp()
    {
        if (SelectedGroupField != null)
        {
            List<string> tempList = AvailableGroupField;
            string selectedItem = SelectedGroupField;

            int currentIndex = tempList.IndexOf(selectedItem);

            if (currentIndex > 0)
            {
                tempList.Remove(selectedItem);
                tempList.Insert(currentIndex - 1, selectedItem);
                AvailableGroupField = null;
                AvailableGroupField = tempList;
                SelectedGroupField = AvailableGroupField.Single(p => p == selectedItem);
            }
        }
    }

    private void MoveItemDown()
    {
        if (SelectedGroupField != null)
        {
            List<string> tempList = AvailableGroupField;
            string selectedItem = SelectedGroupField;

            int currentIndex = tempList.IndexOf(selectedItem);

            if (currentIndex < (tempList.Count - 1))
            {
                tempList.Remove(selectedItem);
                tempList.Insert(currentIndex + 1, selectedItem);
                AvailableGroupField = null;
                AvailableGroupField = tempList;
                SelectedGroupField = AvailableGroupField.Single(p => p == selectedItem);
            }
        }        
    }

Я не объяснил, как связать команду с методом, предполагая, что вы уже поняли это.

0 голосов
/ 11 января 2009

Вы связываете это? Попробуйте изменить порядок элемента объекта привязки и обновить список.

0 голосов
/ 11 января 2009

Я почти уверен, что вы можете выбросить все что угодно в ListBox. Таким образом, вы можете просто сделать свой собственный элемент управления, который имеет метку и две кнопки для стрелок. Затем бросьте его в ListBox и прикрепите события.

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