ListBox с элементами неизвестного типа - как перемещать элементы вверх / вниз - PullRequest
0 голосов
/ 29 мая 2019

Существует множество примеров того, как перемещать ListBoxItem вверх или вниз - но только если известен тип ListBox.ItemsSource.

Может кто-нибудь помочь поделиться более общим кодом, если тип ListBox.ItemsSource просто IEnumerable?

Мне нужен такой код для перемещения ListBoxItem вверх / вниз, независимо от того, был ли ItemsSource установлен в XAML, code-behind или ViewModel.В последнем случае это, скорее всего, будет ObservableCollection.

1 Ответ

1 голос
/ 30 мая 2019

Просто приведите список к объектам.Вот пример, который берет последний элемент и перемещает его к первому элементу во время события двойного щелчка:

private void LbFiles_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    var sourceList = lbFiles.ItemsSource
                            .OfType<object>()
                            .ToList();

    var moveLast = sourceList[sourceList.Count - 1];

    sourceList.RemoveAt(sourceList.Count - 1);

    var newList = new List<object>() { moveLast };

    newList.AddRange(sourceList);

    lbFiles.ItemsSource = newList;
}

XAML

<StackPanel Orientation="Horizontal">
    <StackPanel.Resources>
        <x:Array x:Key="FileNames" Type="system:String">
            <system:String>C:\Temp\Alpha.txt</system:String>
            <system:String>C:\Temp\Beta.txt</system:String >
            <system:String>C:\Temp\Gamma.txt</system:String >
        </ x:Array >
    </ StackPanel.Resources >

    <ListBox Name = "lbFiles"
             ItemsSource = "{StaticResource FileNames}"
             MouseDoubleClick = "LbFiles_MouseDoubleClick"
             Margin = "10" />
</ StackPanel >

Вот онов действии

enter image description here

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