0

この質問は次のようになりますが、実装は異なります。私はその例を私の新しい実装にのみ使用しています

クラスでObservableCollectionをフォローしていますが、WindowsPhone7アプリケーションでそのコレクションを使用してデータをリストボックスにバインドしています

public ObservableCollection<CustomClass> myList = new ObservableCollection<CustomClass>();

次の方法を試しましたが、並べ替えが正しく行われません

私のクラス

public class CustomClass : IComparable<CustomClass>
{
 public string Id { get; set; }        
 public string Name { get; set; }        
 public string CreatedDate get{ get; set; }

 public int CompareTo(CustomClass  other)
    {
        var compareDate1 = DateTime.Parse(CreatedDate);
        var compareDate2 = DateTime.Parse(other.CreatedDate);
        return compareDate2.CompareTo(compareDate1);

    }
 }

SUBクラス

public class ComparingObservableCollection<T> : ObservableCollection<T>
 where T : IComparable<T>
{

protected override void InsertItem(int index, T item)
{
    if (!Items.Contains<T>(item))
        {
            try
            {
                var bigger = Items.First<T>(F => F.CompareTo(item) > 0);
                index = Items.IndexOf(bigger);
            }
            catch
            {
                index = Items.Count;
            }
            finally
            {
                base.InsertItem(index, item);
            }
        }
  }
}

問題はロジックではなく、入力日であり、コードが機能している下の年をチェックせずに次の15日間のcreateddatesをクエリしていますが、12月/1月の日を処理する必要があります

カスタムクラスを更新する

public class CustomClass : IComparable<CustomClass>
{
public string Id { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }

private string _CreatedDate;
public string CreatedDate
{
    private get
    {
        return _CreatedDate;
    }
    set
    {
        Created = DateTime.Parse(value);
        _CreatedDate = value;
    }
}

public CustomClass(string id, string name, string created)
{
    Id = id;
    Name = name;
    CreatedDate = created;
}

public int CompareTo(CustomClass other)
{
    return CreateDate.Date.DayOfYear.CompareTo(other.CreateDate.Date.DayOfYear);
}
}
4

1 に答える 1

1

このクラスを単独でソートする場合(CreatedDate)

public class CustomClass : IComparable<CustomClass>
{
    public string Id { get; set; }
    public string Name { get; set; }
    public DateTime Created { get; set; }

    private string _CreatedDate;
    public string CreatedDate
    {
        private get
        {
            return _CreatedDate;
        }
        set
        {
            Created = DateTime.Parse(value);
            _CreatedDate = value;
        }
    }

    public CustomClass(string id, string name, string created)
    {
        Id = id;
        Name = name;
        CreatedDate = created;
    }

    public int CompareTo(CustomClass other)
    {
        return Created.CompareTo(other.Created);
    }
}

public class ComparingObservableCollection<T> :  ObservableCollection<T> where T : IComparable<T>
{
    // this function presumes that list is allways sorted and index is not used at all
    protected override void InsertItem(int index, T item)
    {
        if (!Items.Contains<T>(item))
        {
            try
            {
                var bigger = Items.First<T>(F => F.CompareTo(item) > 0);
                index = Items.IndexOf(bigger);
            }
            catch 
            {
                index = Items.Count;
            }
            finally
            {
                base.InsertItem(index, item);
            }
        }
    }
}
于 2012-07-19T11:24:45.160 に答える