private void LoadInfoFromMetadata(SortContext sortContext) { listViewPluginInfo.BeginUpdate(); listViewPluginInfo.Items.Clear(); var pluginsInfo = _xDoc.Root.Elements("Plugin").Select(el => new PluginInfo { Name = el.Element("Name").Value, Description = el.Element("Description").Value, Version = Convert.ToDecimal(el.Element("Version").Value), Date = Convert.ToDateTime(el.Element("Date").Value), Author = el.Element("Author").Value, Url = new Uri(el.Element("Url").Value), Element = el }); IOrderedEnumerable <PluginInfo> orderedList = null; //if (sortContext.SortOrder == SortOrder.Ascending) //{ // orderedList = pluginsInfo.OrderBy(p => GetSortProp(p, sortContext)); //} //else //{ // orderedList = pluginsInfo.OrderByDescending(p => GetSortProp(p, sortContext)); //} // # 2 version switch (sortContext.SortType) { case SortType.Name: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Name); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Name); break; } break; case SortType.Description: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Description); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Description); break; } break; case SortType.Version: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Version); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Version); break; } break; case SortType.Author: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Author); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Author); break; } break; case SortType.Date: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Date); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Date); break; } break; case SortType.Url: switch (sortContext.SortOrder) { case SortOrder.Ascending: orderedList = pluginsInfo.OrderBy(p => p.Url.AbsolutePath); break; case SortOrder.Descending: orderedList = pluginsInfo.OrderByDescending(p => p.Url.AbsolutePath); break; } break; } ListViewItem[] lvItems = orderedList.Select(p => new ListViewItem(p.Name) { SubItems = { p.Description, p.Version.ToString("#0.00"), p.Date.ToString("yyy-MM-dd"), p.Author, p.Url.ToString() }, Tag = p }).ToArray(); listViewPluginInfo.Items.AddRange(lvItems); listViewPluginInfo.EndUpdate(); }