Как поставить предмет из середины списка на первое место? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть список привязок:

BindingList<partner> partnerList = _context.partner.Local.ToBindingList();

this._view.PartnerDatasource.DataSource = partnerList;

Это источник данных для выпадающего меню.То, что я хочу, это поместить конкретный элемент, который будет отображаться как первый элемент в раскрывающемся списке.Я попробовал что-то вроде этого:

 public  void Swap<T>(IList<T> list, int indexA, int indexB)
        {
            T tmp = list[indexA];
            list[indexA] = list[indexB];
            list[indexB] = tmp;
        }

, а затем:

 this.Swap(partnerList, 0, partnerList.Count - 1);

Это работает, когда дело доходит до подкачки, но каким-то образом полностью портит структуру сущностей, и я получаю различные ошибки в дальнейшем.когда я пытаюсь использовать эти сущности (партнер) ...

Что будет подходящим способом сделать это?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018
var names = new [] { "Alice", "Bob", "Charlie", "Dave", "Eve" };
var specialName = "Eve";

var sortedNames = names.OrderByDescending(x => x == specialName);
foreach (var name in sortedNames)
    Console.WriteLine(name);

Результат:

Eve
Alice
Bob
Charlie
Dave
0 голосов
/ 04 октября 2018

Список не реализует метод Move(Int32 oldIndex, Int32 newIndex), но это делает ObservableCollection.

Итак, вы можете сначала преобразовать этот список в ObservableCollection и попробовать использовать .Move (Int32 oldIndex,Int32 newIndex) метод.

using System;
using System.Collections.ObjectModel;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {

        List<Partner> partenrs=new List<Partner>();
        partenrs.Add(new Partner(){Name="A"});
        partenrs.Add(new Partner(){Name="B"});
        partenrs.Add(new Partner(){Name="C"});
        partenrs.Add(new Partner(){Name="D"});
        partenrs.Add(new Partner(){Name="E"});
        partenrs.Add(new Partner(){Name="F"});

        var obser=new ObservableCollection<Partner>(partenrs);

        obser.Move(0,5);
        foreach(var x in obser)
        {
            Console.WriteLine(x.Name);
        }
    }
}

class Partner
{
    public string Name{get;set;}
}
0 голосов
/ 04 октября 2018

Дайте им приоритет, а затем упорядочите по нему:

partnerList.OrderByDesending(x=> x.someProperty == Something); 

Или, если вам нужно заказать по индексу:

  partnerList.Select((item ,i) => new { item , neworder = i == index ? 0 : 1})
           .OrderBy(x=> x.neworder).Select(a=> a.item); 

Live Demo

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