我的代码是,
DestMenu.Add(SelectedMenu);
ObservableCollection<MenuModel> temp =
(ObservableCollection<MenuModel>)DestMenu.OrderBy(p =>(p.MenuName));
DestMenu = temp;
此处,SelectedMenu是要添加到集合的新项目。 temp是虚拟集合交换。并且,当我尝试将已排序的集合(如果有的话)转换为ObservableCollection时,它会抛出一些异常。
有人可以帮我分类收集并让我理解代码中的问题吗?
由于 Manikandan
答案 0 :(得分:1)
我得到了诀窍。
DestMenu.Add(SelectedMenu);
IEnumerable<MenuModel> temp = DestMenu.OrderBy(p =>(p.MenuName));
DestMenu = new ObservableCollection<MenuModel>(temp);
这有效,DestMenu现在有了已排序的集合。
由于 Manikandan
答案 1 :(得分: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));
}
}