2017-02-09 2 views
0

MVVMを使用していて、ComboBoxを昇順に並べ替える必要があります。 ObservableCollectionに保存されているアイテム(データベースから)は、常に文字列として格納されています。c#Linq(ObservableCollection)を使用している文字列であるComboBoxの注文番号

私が10を超えると、私のComboBoxは、1と表示され、続いて10と表示されます。

正しく並べ替えるためにLinqを調整できますか?

これは間違っていますか?

public ObservableCollection<clsItemsModel> MyCollection 
{ 
    get { return _MyCollection; } 
    set 
    { 
     _MyCollection = value; 
     RaisePropertyChanged(); 
    } 
} 

private void LoadData() 
{ 
    MyCollection = _clsItemsDataService.GetItems(); 
    MyCollection.OrderBy(p => p.Items); 
} 
+2

ソートする前に文字列をintに変換する必要があります。例えば、1 3 9 10の代わりに1 10 3 9のようにします。 – itsme86

+3

'int.Parse(p.Items)'? (「Items」は*単一の値*の直感的な名前のように見えますが) – David

+0

答えはここにあります: http://stackoverflow.com/questions/6396378/c-sharp-linq-orderby-numbers-that-are-文字列と変換できません –

答えて

0

ソート中に文字列を整数に変換する必要があります。

MyCollection = new ObservableCollection<clsItemsModel>(_clsItemsDataService.GetItems() 
            .OrderByDescending(p => Convert.ToInt32(p.Items))); 

しかし、あなたはItemsが整数に変換できないものを含んでいてもよいことを恐れなければならないfは、あなたではなくint.TryParse()を使用したい:これは、そのように行うことができます

MyCollection = new ObservableCollection<clsItemsModel>(_clsItemsDataService.GetItems() 
        .OrderByDescending(p => 
        { 
         int n; 
         return int.TryParse(p.Items, out n) ? n : int.MinValue; 
        })); 

そのOrderByDescendingではなく、のインスタンスメソッドObservableCollection<T>です。 ではなく、がそのインスタンスをソートしますが、並べ替えられたシーケンスを表す新しいIEnumerable<T>を返します。 Thatswhy OrderByDescendingによって返された並べ替えられたシーケンスから新しいObservableCollection<clsItemsModel>を作成します。


セカンドノート:あなたは "昇順" の数字をしたいと述べたが、OrderByDescendingを使用しています。私はその部分をコピーしましたが、代わりにOrderByを使いたいかもしれません。

+0

これはうまくいきました!!!はい、それは私がコンボボックスが何をするかを見ようとしていたので、OrderByDescendingを使って間違っていました。それを元に戻すのを忘れました。 –

関連する問題