2011-06-23 10 views
0

私はカスタムBindingListをソートしようとしています。しかし、私はComparerが私のクラスのプロパティを認識しないという問題に出くわしました。 "x.Code_PK_OriginalValue"が認識されません。変わったことは、最初のコードブロックの "Begrenzingen"と異なるComparerクラスのIntellisenseマーク "Begrenzingen"です。C#カスタムコンバージェントと比較デリゲート

BindingListX<Begrenzingen> lst = new BindingListX<Begr.....; 

lst.OrderBy(t => t, new CustomComparer<Begrenzingen>()); 

public class CustomComparer<Begrenzingen> : IComparer<Begrenzingen> 
{ 
    private readonly Comparison<Begrenzingen> _comparison; 

    public CustomComparer() 
    { 
     _comparison = new Comparison<Begrenzingen>(
          (Begrenzingen x, Begrenzingen y) => 
          { 
           return x.Code_PK_OriginalValue.CompareTo(y.Code_PK_OriginalValue); 
          } 
        ); 
    } 

    public int Compare(Begrenzingen x, Begrenzingen y) 
    { 
     return _comparison(x, y); 
    } 
} 

public class BindingListX<T> : BindingList<T> 
{ 
    public void OrderBy(Func<T,T> keySelector, IComparer<T> comparer) 
    { 
     this.Items.OrderBy(keySelector, comparer); 
    } 
} 

public class Begrenzingen : DefaultTable, IComparable<Begrenzingen> 
{ 
    public Begrenzingen() 
    { //New -> Insert DB 
     Code_PK_OriginalValue = -1; 
     isDeleted = false; 
    } 

    public decimal Code_PK_OriginalValue { get; set; } 
    public decimal Code_PK { get; set; } 
    public string Naam { get; set; } 
    public decimal? SeqLayer { get; set; } 

    public Boolean isDeleted { get; set; } 

    public string SeqLayerDisplayValue { 
     get { 
      if (SeqLayer == null) return string.Empty; 
      return (from sdo in MainWindow.Main.SdoLayers where sdo.SeqLayer == this.SeqLayer select sdo.DisplayValue).First(); 
     } 
    } 


    public override string ToString() 
    { 
     return String.Format("{0};{1};{2};{3}", Code_PK_OriginalValue, Code_PK, Naam, SeqLayer); 
    } 

    public int CompareTo(Begrenzingen o) 
    { 
     return Code_PK.CompareTo(o.Code_PK); 
    } 
} 
+0

についてどのようにあなたのクラスが見えますか? –

+0

OP – Stinus

+0

の編集を参照してくださいなぜ比較メソッドの内部でロジックを実装するのではなく、余分な比較を使用していますか? –

答えて

1

方法だけlst.OrderBy(t => t.Code_PK_OriginalValue);

+0

私のコードを に変更しました。 'public void OrderBy(Func keySelector) { this.Items.OrderBy(keySelector); } ' と' lst.OrderBy(t => t.Code_PK); '。 しかし、これで私のリストはソートされません。アイテムは元の順序で残っています。 – Stinus

+2

'OrderBy'は実際にはリストをソートしませんが、ソートされた' IEnumerable'を返します。 'lst = lst.OrderBy(t => t.Code_PK).ToList();' – Magnus