首页 > 解决方案 > 具有未知类型项目的 ListBox - 如何向上/向下移动项目

问题描述

有很多关于如何ListBoxItem向上或向下移动的示例——但前提是ListBox.ItemsSource类型是已知的。

ListBox.ItemsSource如果类型是简单的,任何人都可以帮助分享一些更通用的代码IEnumerable吗?

我需要这样的代码ListBoxItem向上/向下移动,无论ItemsSource是在 XAML、代码隐藏或 ViewModel 中设置。在后一种情况下,它很可能是一个ObservableCollection.

标签: c#wpf

解决方案


只需将列表转换为对象即可。这是一个在双击事件期间获取最后一项并将其移动到第一项的示例:

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 >

这是在行动

在此处输入图像描述


推荐阅读