تعيين المقارن لListViewItemSorter
سؤال
وأريد أن فرز تحكم ListView في C # يستند إلى أعمدة. لقد خلق 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
الخاص بك ينبغي أن تنفذ IComparer
غير عام بدلا من ذلك؟
نصائح أخرى
وأعتقد أن الطبقة المقارن يجب أن يكون IComparer, not IComparer<type>
.
هنا مقال التي قد تساعد، ويستخدم وSortDescriptions.
والمحاولة
class ListViewItemComparer : IComparer
وليس
class ListViewItemComparer : IComparer<ListViewItem>
لا تنتمي إلى StackOverflow