比較子をListViewItemSorterに割り当てる
質問
列に基づいてC#でListViewコントロールを並べ替えたい。 ColumnClickEventHandlerを作成しました:
private void contactsListView_ColumnClick(object sender, ColumnClickEventArgs e)
{
contactsListView.ListViewItemSorter = new ListViewItemComparer(e.Column);
contactsListView.Sort();
}
ListViewItemComparerクラスは次のようになります。
class ListViewItemComparer : IComparer<ListViewItem>
{
private int col;
public ListViewItemComparer()
{
col = 0;
}
public ListViewItemComparer(int column)
{
col = column;
}
public int Compare(ListViewItem x, ListViewItem y)
{
int returnVal = -1;
returnVal = String.Compare(x.SubItems[col].Text, y.SubItems[col].Text);
return returnVal;
}
}
このコードはコンパイルされません。contactsListView.ListViewItemSorterはIComparer型で、ListViewItemComparerクラスはIComparerです。
一方を他方に明示的にキャストする方法はありますか?または、単に別の方法でソートしますか?
事前に感謝
解決
ジェネリックIComparer<T>
と非ジェネリックIComparer
は、相互に変換できません。
多分あなたのListViewItemComparer
は非ジェネリック<=>を代わりに実装すべきでしょうか?
他のヒント
比較クラスはI Comparer, not IComparer<type>
でなければなりません。
ここに役立つ記事があります。 SortDescriptions。
試用
class ListViewItemComparer : IComparer
ない
class ListViewItemComparer : IComparer<ListViewItem>
所属していません StackOverflow