2013-07-17 44 views
0

我的代碼,排序依據()在Silverlight中observablecollections不起作用

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

這裏,SelectedMenu將被添加到集合中的新項目。臨時是虛擬收集交換。而且,當我嘗試將已排序的集合(如果有)轉換爲ObservableCollection時,它會引發一些異常。

有人可以幫我排序集合,讓我明白我的代碼中的問題?

感謝 Manikandan

回答

1

我得到的伎倆。

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

這個工程和DestMenu現在有排序的集合。

感謝 Manikandan

+0

請讓我知道,如果你有其他一些不錯的選擇,請。 – Manikandan

0

好心痛啊排序依據擴展方法不排序的集合,但返回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)); 
     } 
    }