WPF中ListView添加CheckBox列,并有排序功能

syhzk 2020-12-21 08:33:14
ListView中加入了CheckBox,CheckBox有选择的,有没选择的。现在要把它们的排序,使选择的在一起。 其他列排序都可以,就CheckBox列无法实现。
...全文
13743 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziqi0716 2021-01-14
  • 打赏
  • 举报
回复
引用 12 楼 syhzk 的回复:
我的list数据是从其他窗体传送过来的。 MainWindow窗体 private void Window_Loaded(object sender, RoutedEventArgs e) { DataList = new List<Data>() { new Data(){IsChecked = false,Name = "aaaaa",Description = "mmmmmm"}, new Data(){IsChecked = true,Name = "bbbbb",Description = "rrrrrrrrrrr"}, new Data(){IsChecked = true,Name = "ccccc",Description = "aaaaaaaaa"}, new Data(){IsChecked = false,Name = "ddddd",Description = "bbbbbbbbbbb"}, }; Window1 win = new Window1(DataList); win.Show(); } Window1 窗体 public partial class Window1 : Window { List<Data> DataList; public Window1(List<Data> datalist) { DataList= datalist; InitializeComponent(); } } 前台被我屏蔽了。 <!--<Window.DataContext> <local:MainViewModel></local:MainViewModel> </Window.DataContext>--> 后续改怎么做?
引用 12 楼 syhzk 的回复:
我的list数据是从其他窗体传送过来的。 MainWindow窗体 private void Window_Loaded(object sender, RoutedEventArgs e) { DataList = new List<Data>() { new Data(){IsChecked = false,Name = "aaaaa",Description = "mmmmmm"}, new Data(){IsChecked = true,Name = "bbbbb",Description = "rrrrrrrrrrr"}, new Data(){IsChecked = true,Name = "ccccc",Description = "aaaaaaaaa"}, new Data(){IsChecked = false,Name = "ddddd",Description = "bbbbbbbbbbb"}, }; Window1 win = new Window1(DataList); win.Show(); } Window1 窗体 public partial class Window1 : Window { List<Data> DataList; public Window1(List<Data> datalist) { DataList= datalist; InitializeComponent(); } } 前台被我屏蔽了。 <!--<Window.DataContext> <local:MainViewModel></local:MainViewModel> </Window.DataContext>--> 后续改怎么做?
我只能提供示例代码,毕竟你的代码如何实现我是看不到的呀
syhzk 2021-01-11
  • 打赏
  • 举报
回复
我的list数据是从其他窗体传送过来的。 MainWindow窗体 private void Window_Loaded(object sender, RoutedEventArgs e) { DataList = new List<Data>() { new Data(){IsChecked = false,Name = "aaaaa",Description = "mmmmmm"}, new Data(){IsChecked = true,Name = "bbbbb",Description = "rrrrrrrrrrr"}, new Data(){IsChecked = true,Name = "ccccc",Description = "aaaaaaaaa"}, new Data(){IsChecked = false,Name = "ddddd",Description = "bbbbbbbbbbb"}, }; Window1 win = new Window1(DataList); win.Show(); } Window1 窗体 public partial class Window1 : Window { List<Data> DataList; public Window1(List<Data> datalist) { DataList= datalist; InitializeComponent(); } } 前台被我屏蔽了。 <!--<Window.DataContext> <local:MainViewModel></local:MainViewModel> </Window.DataContext>--> 后续改怎么做?
syhzk 2021-01-10
  • 打赏
  • 举报
回复
我还是尝试把数据改成Data <List>,然后再说。
syhzk 2021-01-10
  • 打赏
  • 举报
回复
我看了,看不懂。 我绑定的数据是DataTable。 DataList = new DataTable(); DataList.Columns.Add("biaoji", typeof(Boolean)); DataList.Columns.Add("id", typeof(Int32)); DataList.Columns.Add("xinghao", typeof(String)); DataList.Columns.Add("quanya", typeof(Double)); DataRow dr = DataList.NewRow(); dr["biaoji"] = false; dr["Name"] = "dsfsf"; dr["Description"] = "rgdeye"; DataList.Rows.Add(dr); ................... ................... DataGrid.ItemsSource = DataList.DefaultView; DataGrid.SelectedIndex = 0; 真不好意思,我太笨了,没有基础,全凭原来VB的一点知识,编了这个软件。 麻烦你载动动手,拜托!
ziqi0716 2021-01-07
  • 打赏
  • 举报
回复
第二种的示例已上传,还是原来那个,你拉取下
ziqi0716 2021-01-07
  • 打赏
  • 举报
回复
引用 6 楼 syhzk 的回复:
我现在改用DataView了,可以排序。就是排序以后,数据乱了,点击的一条数据,ID不对。
第一种方法:红框数据绑定后台数据的SelecedProduct(示例属性名),然后用值转换器,返回型号属性的值. 第二种方法:重写风机对象的ToString()方法,输出一个格式化后的字符串,分级参数里面用一个lable,Content绑定SelecedProduct(默认显示ToString()后的字符串).
syhzk 2021-01-07
  • 打赏
  • 举报
回复
是DataGrid,我写错了。
syhzk 2021-01-07
  • 打赏
  • 举报
回复
我现在改用DataView了,可以排序。就是排序以后,数据乱了,点击的一条数据,ID不对。
syhzk 2020-12-22
  • 打赏
  • 举报
回复
我水平业余,年龄大,66岁了,代码看的不是很懂。 排序,有正排序,负排序。能否把排序的次序改一下?
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
wpf讲究的是数据驱动UI的mvvm,依照这个思路的的话,很容易实现: ListView的ItemsSource绑定到一个对象列表,取名DataList吧,对象类名叫Data,是否被选中就是Data的一个属性,叫IsChecked吧. ListView的ItemTemplate中用CheckBox来实现,是否被选中,绑定Data对象的IsChecked属性. 一个按钮绑定后台的排序命令,排序命令对DataList进行排序操作,并引发属性改变事件. 当然,你要在点击checkbox时候触发排序也是可以的,放到属性设置器中进行触发
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
DataList = DataList.OrderBy(d => d.IsChecked).ToImmutableList().ToList();//正序 DataList = DataList.OrderByDescending(d => d.IsChecked).ToImmutableList().ToList();//逆序
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
引用 3 楼 syhzk 的回复:
我水平业余,年龄大,66岁了,代码看的不是很懂。 排序,有正排序,负排序。能否把排序的次序改一下?
你这个来看,本身后台应该是一个一个对象,然后用一个表格显示就好了.表格本身就是可以支持点击表头进行排序的,不用绕半天(就是说,这里不该用ListView,而应该用DataGrid). 我的代码没几行啊,你可以写出这么多功能,不至于看不懂啊.

111,118

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧