この質問は次のようになりますが、実装は異なります。私はその例を私の新しい実装にのみ使用しています
クラスで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);
}
}