Преобразование IEnumurable в коллекцию Observable без создания нового экземпляра коллекции Observable - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть Наблюдаемая коллекция , которая содержит мои значения данных. Я хочу использовать Orderby в этой коллекции, но я получаю некоторые исключения, такие как "Cannot convert IEnumurable to ObservableCollection". Можно ли использовать OrderBy или дать мне несколько вариантов для Сортировать коллекцию ?

Кто-нибудь, пожалуйста, сообщите мне решение этого. Заранее спасибо.

Мой код:

get {

     return _availableStocks == null ? null : _availableStocks .OrderBy(z => z.Casepack.CasePackContents);   
     // Here _availableStocks is my collection
     //Here i am not able to use orderby in this collection Its showing error line
     // Here i need to sort the _availableStocks 
    }

Мой фактический код:

   foreach (var cachedStock in AvailableSelectedStocks)
      {

          if (SelectedStock != null)
          {

            AvailableStocks= CollectionViewSource.GetDefaultView(_availableStocks);

            AvailableStocks.SortDescriptions.Add(new SortDescription(SelectedStock.Casepack.CasePackContents.Count.ToString(), ListSortDirection.Ascending));
            //In this above line i am getting the Sort descriptions only i am not getting the datas in the SourceCollection . how can i get values in this Collection

            this.SelectedStocks.Remove(SelectedStock);

            this.RaisePropertyChanged(Member.Of(() => AvailableStocks));

         }
      }

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012

Расширение .OrderBy возвращает IEnumerable, который вызывает вашу проблему.Попытка сортировки в получателе также несколько плоха.

Я бы хотел обернуть вашу наблюдаемую коллекцию с помощью ICollectionView

Т.е.

public ICollectionView Stocks { get; private set; }

private readonly ObservableCollection<Stock> stocks;

Конструктор

  stocks = new ObservableCollection<Stock>();
  Stocks = CollectionViewSource.GetDefaultView(stocks);
  Stocks.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));

Где «Имя» - это имя свойства класса Акции, по которому вы хотите отсортировать.

Когда вы добавляете в наблюдаемую коллекцию «акции», «Акции»'ICollectionView будет обновлен, и ваш вид отобразит элементы в отсортированном порядке.

0 голосов
/ 14 февраля 2012

Вы можете попробовать

return new ObservableCollection<Stock>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());
0 голосов
/ 14 февраля 2012

Если ваш тип свойства представляет собой коллекцию Observable, вам также необходимо вернуть коллекцию Observable:

if (_availableStocks == null)
{
  return null;
}

var orderredStocks = _availableStocks.OrderBy(z => z.Casepack.CasePackContents);
return new ObservableCollection<T>(orderredStocks);

Замена T на тип вашей акции.

Обратите внимание, что каждый раз, когда вы 'Получив доступ к свойству, упорядочение будет выполнено, поэтому было бы неплохо переместить этот код в другое место, где он будет выполнен один раз, а его результат будет возвращен свойством.

0 голосов
/ 14 февраля 2012

OrderBy () - метод расширения для System.Linq.

Вам необходимо использовать System.Lninq поверх вашего класса.

Поместить

с помощью System.Lninq;

Сначала убедитесь в этом.

Вы можете создать новый экземпляр Observable Collection с помощью ...

return new ObservableCollection<SOMETYPE>(_availableStocks.OrderBy(z=>.Casepack.CasePackContents).ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...