0

私のコードは、

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

ここで、SelectedMenu はコレクションに追加される新しい項目です。temp はスワップするダミー コレクションです。そして、並べ替えられたコレクションがある場合は ObservableCollection に変換しようとすると、例外がスローされます。

誰かがコレクションを並べ替えて、コードの問題を理解するのを手伝ってくれますか?

ありがとうマニカンダン

4

2 に答える 2

0

OrderBy 拡張メソッドはコレクションを並べ替えずに IOrderdEnumerable を返すので、これを処理するには次のようにする必要があります。

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

もちろん、ObservableCollection を使用すると、ビュー上で項目を更新する必要があります。これは、この並べ替えのアプローチを使用するときに実際には発生しません。ObservableCollection は、CollectionChanged イベントを発生させるため、ビュー上の項目を更新しますが、実際には、コレクション内の要素ではなく、コレクション自体を変更しました。コレクションなので、次のことを行うとよいでしょう

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 に答える