具有未知类型项目的ListBox-如何上/下移动项目

时间:2019-05-29 18:22:16

标签: c# wpf

有许多关于如何上下移动MyModule |_assets/test.txt |_lib/ |_pubspec.yaml 的示例-但只有在知道ListBoxItem类型的情况下。

如果ListBox.ItemsSource类型只是ListBox.ItemsSource,谁能帮助共享一些通用代码?

我需要这样的代码来上下移动IEnumerable,无论是否在XAML,代码隐藏或ViewModel中设置了ListBoxItem。在后一种情况下,很有可能是ItemsSource

1 个答案:

答案 0 :(得分:1)

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

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