0

我的代码是,

DestMenu.Add(SelectedMenu);
ObservableCollection<MenuModel> temp = 
(ObservableCollection<MenuModel>)DestMenu.OrderBy(p =>(p.MenuName));
DestMenu = temp;

在这里,SelectedMenu 是要添加到集合中的新项目。temp 是要交换的虚拟集合。而且,当我尝试将已排序的集合(如果有)转换为 ObservableCollection 时,它会引发一些异常。

有人可以帮我对集合进行排序并让我理解代码中的问题吗?

谢谢曼尼坎丹

4

2 回答 2

1

我明白了。

DestMenu.Add(SelectedMenu);
IEnumerable<MenuModel> temp = DestMenu.OrderBy(p =>(p.MenuName));
DestMenu = new ObservableCollection<MenuModel>(temp);

这有效,并且 DestMenu 现在具有排序的集合。

谢谢曼尼坎丹

于 2013-07-18T06:00:21.290 回答
0

很遗憾,OrderBy 扩展方法不对集合进行排序,而是返回一个 IOrderdEnumerable,所以要处理这个问题,您应该执行以下操作

DestMenu = new ObservableCollection<MenuModel>(DestMenu.OrderBy(o=>o.MenuName));

当然,使用 ObservableCollection 您需要在视图上更新项目,而当您使用这种排序方法时,这实际上不会发生,因为 ObservableCollection 会更新视图上的项目,因为它会触发 CollectionChanged 事件,但实际上我们已经更改了 Collection 本身,而不是收集,所以如果您执行以下操作会很好

public YourClass : INotifyPropertyChanged
{
  void YourMethod()
   {
      DestMenu = new ObservableCollection<MenuModel>(DestMenu.OrderBy(o=>o.MenuName));
      RaisePropertyChanged("DestMenu");
   }


  event PropertyChangedEventHandler PropertyChanged;

  void RaisePropertyChanged(string PropertyName)
  {
    var handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(PropertyName));
        }
  }
于 2014-01-12T19:34:11.187 回答