名前、サイズ、日付でデータを並べ替える作業をしています。 私はそれらを名前で並べ替えることができましたが、クラスに複数のcompareメソッドを実装する方法についてはあまりよく分かりません。私はデリゲートの使用を見てみましたが、実際にどのように正確に動作するのかは分かりませんでした。 は、ここで私は私が考えていたもの比較で複数のソート方法を指定するにはどうすればよいですか?
private List<data> _myList = new List<data>();
private bool sortAsc = false;
public class data
{
public string Name { get; set; }
public string Size { get; set; }
public string Date { get; set; }
public bool flag { get; set; }
}
private void GridViewColumnHeader_Name(object sender, RoutedEventArgs e)
{
sortAsc = !sortAsc;
if (sortAsc)
_myList.Sort(new ListViewColumnSorterAsc());
else
_myList.Sort(new ListViewColumnSorterDesc());
//------------------
listView.Items.Clear();
foreach (var item in _myList)
listView.Items.Add(item);
}
public class ListViewColumnSorterAsc : IComparer<data>
{
public int Compare(data x, data y)
{
if (x.flag == y.flag)
{
if (x.Name.CompareTo(y.Name) == 0)
return 0;
else if (x.Name.CompareTo(y.Name) == 1)
return 1;
else
return -1;
}
else if (x.flag)
{
return -1;
}
return 0;
}
}
// ------- は私が望む方法を特定するために「ListViewColumnSorterAsc」にコンストラクタを作成し、それにENUMを渡すようにした、これまでに得たものです が起こると、そのクラスに
public enum Sorting_Mode
{
by_Name = 1,
by_Size = 2,
by_Date = 3
};
public class ListViewColumnSorterAsc : IComparer<data>
{
private Sorting_Mode srtMode;
public ListViewColumnSorterAsc(Sorting_Mode srtMode)
{
this.srtMode = srtMode;
if(srtMode == Sorting_Mode.by_Size)
{
// i'm not quite sure what to set here and how to pass it
// to Compare
}
if(srtMode == Sorting_Mode.by_Name)
{
}
if(srtMode == Sorting_Mode.by_Date)
{
}
}
public int Compare(data x, data y)
{
// i want to use the same code as the above except it should be
// object1.compareType.CompareTo(object2.compareType)
}
の方法を比較するために、引数として、私は解決策は、デリゲートを使用しているほとんど確信しているので、誰かがplzはそれらが使用されている方法を説明できることを渡すための一種。私はそれが複雑だったデリゲートについてのMSDNのページを読む
お返事ありがとうございます – Acidburn73