ObservableCollection 实现添加后排序

按MyClass的Name字段排序 

public class EntityObjectMuster : ObservableCollection<MyClass> 
{
         /// <summary>
        /// 实现排序插入
        /// </summary>
        /// <param name="baseSemObjects"></param>
        public void AttachItem(MyClass entityObject)
        {
            if (this.Count == 0)
            {
                Add(entityObject);
            }
            else
            {
                bool isInsret = false;
                for (int i = 0; i < this.Count; i++)
                {
                    if (String.Compare(this[i].Name, entityObject.Name, false) >= 0)
                    {
                        InsertItem(i, entityObject);
                        isInsret = true;
                        break;
                    }
                }
                if (!isInsret)
                {
                    Add(entityObject);
                }
            }
        }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于WPF MVVM实现ListBox拖动排序的代码示例: 首先,我们需要使用System.Windows.Interactivity和Microsoft.Expression.Interactions这两个NuGet包。 然后,在ListBox上添加以下命名空间: ```xml xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" ``` 接着,在ListBox上添加以下代码: ```xml <ListBox ItemsSource="{Binding Items}"> <i:Interaction.Triggers> <i:EventTrigger EventName="Loaded"> <ei:ChangePropertyAction PropertyName="AllowDrop" Value="True"/> </i:EventTrigger> <i:EventTrigger EventName="PreviewMouseLeftButtonDown"> <ei:CallMethodAction MethodName="PreviewMouseLeftButtonDown"/> </i:EventTrigger> <i:EventTrigger EventName="Drop"> <ei:CallMethodAction MethodName="Drop"/> </i:EventTrigger> </i:Interaction.Triggers> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Name}"/> </DataTemplate> </ListBox.ItemTemplate> </ListBox> ``` 在ViewModel中,我们需要实现以下几个方法: ```csharp public class MainViewModel { public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>(); private Item _draggedItem; private int _draggedIndex; public void PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var listBoxItem = FindVisualParent<ListBoxItem>((DependencyObject)e.OriginalSource); if (listBoxItem == null) return; _draggedItem = (Item)listBoxItem.DataContext; _draggedIndex = Items.IndexOf(_draggedItem); DragDrop.DoDragDrop(listBoxItem, listBoxItem.DataContext, DragDropEffects.Move); } public void Drop(object sender, DragEventArgs e) { var listBoxItem = FindVisualParent<ListBoxItem>((DependencyObject)e.OriginalSource); if (listBoxItem == null) return; var targetItem = (Item)listBoxItem.DataContext; var targetIndex = Items.IndexOf(targetItem); Items.Move(_draggedIndex, targetIndex); _draggedItem = null; } private static T FindVisualParent<T>(DependencyObject child) where T : DependencyObject { while (true) { var parentObject = VisualTreeHelper.GetParent(child); if (parentObject == null) return null; if (parentObject is T parent) return parent; child = parentObject; } } } public class Item { public string Name { get; set; } } ``` 这里使用了一个辅助方法FindVisualParent,用于查找父级元素。PreviewMouseLeftButtonDown方法用于设置拖动项和拖动项的索引,Drop方法用于移动项,Items.Move方法会自动更新UI。 最后,我们需要在MainWindow中绑定ViewModel: ```xml <Window.DataContext> <local:MainViewModel/> </Window.DataContext> ``` 这样,我们就实现了ListBox拖动排序的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值