c# wpf listview 按列表项的列排序
c# wpf listview sort by colum with listviewitems
我尝试对 wpf Listview 进行排序,这工作正常..但前提是我将新项目添加为简单对象:
这个有效:
listview_files.Items.Add(new { isdir = (String)ele.Element("isdir"), number = (int)ele.Element("id"), name = (String)ele.Element("name"), size = groesse, right = modes, date = (String)ele.Element("date") });
与:
listview_files.Items.SortDescriptions.Add(new SortDescription(sortBy, direction));
但是如果我像这样添加项目:
ListViewItem myitem = new ListViewItem();
myitem.Content=new { isdir = (String)ele.Element("isdir"), number = (int)ele.Element("id"), name = (String)ele.Element("name"), size = groesse, right = modes, date = (String)ele.Element("date") };
myitem.ContextMenu = con2;
myitem.MouseDoubleClick += myitem_MouseDoubleClick;
listview_files.Items.Add(myitem);
它总是排序相同,sortdirection和clicked colum没有区别(sortBy,direction的值总是正确的)
我认为问题是 "Content" 属性,但我如何强制 SortDescription 使用 ListViewItem.Content Proberty 进行排序?
发生这种情况是因为项目集合的直接子级在第一种情况下是对象本身,而在第二种情况下是 ListViewItem-s。因此,如果您要求它按 number
排序,它不会在 ListViewItem
中找到此 属性。但是,它会找到 Content.number
并且您可以使用它。但是你为什么不使用绑定呢?这将是一种更自然的方式。
我尝试对 wpf Listview 进行排序,这工作正常..但前提是我将新项目添加为简单对象:
这个有效:
listview_files.Items.Add(new { isdir = (String)ele.Element("isdir"), number = (int)ele.Element("id"), name = (String)ele.Element("name"), size = groesse, right = modes, date = (String)ele.Element("date") });
与:
listview_files.Items.SortDescriptions.Add(new SortDescription(sortBy, direction));
但是如果我像这样添加项目:
ListViewItem myitem = new ListViewItem();
myitem.Content=new { isdir = (String)ele.Element("isdir"), number = (int)ele.Element("id"), name = (String)ele.Element("name"), size = groesse, right = modes, date = (String)ele.Element("date") };
myitem.ContextMenu = con2;
myitem.MouseDoubleClick += myitem_MouseDoubleClick;
listview_files.Items.Add(myitem);
它总是排序相同,sortdirection和clicked colum没有区别(sortBy,direction的值总是正确的) 我认为问题是 "Content" 属性,但我如何强制 SortDescription 使用 ListViewItem.Content Proberty 进行排序?
发生这种情况是因为项目集合的直接子级在第一种情况下是对象本身,而在第二种情况下是 ListViewItem-s。因此,如果您要求它按 number
排序,它不会在 ListViewItem
中找到此 属性。但是,它会找到 Content.number
并且您可以使用它。但是你为什么不使用绑定呢?这将是一种更自然的方式。