wpf ListView 中checkBox全选 如何实现?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf ListView 中checkBox全选 如何实现?相关的知识,希望对你有一定的参考价值。

参考技术A 提供两种方法:
1.如果是手动添加数据,只能通过循环实现
2.如果是根据类实现的数据绑定,只要在类中添加一个bool变量,默认值为true,绑定到checkbox就ok。这种情况下可以通过让类继承INotifyPropertyChanged 类的列表继承ObservableCollection实现。
附上一段代码,看不懂百度HI我。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace AddrBook

public class People : INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propName)

if (PropertyChanged != null)

PropertyChanged(this, new PropertyChangedEventArgs(propName));


private string name = string.Empty;
public string Name

get return name;
set

if (name == value)

return;

else

name = value;
NotifyPropertyChanged("Name");




private string phonenum = string.Empty;
public string PhoneNum

get return phonenum;
set

if (phonenum == value)

return;

else

phonenum = value;
NotifyPropertyChanged("PhoneNum");




private bool? ischecked = false;

public bool? IsChecked

get return ischecked;
set

if (ischecked == value)

return;

else

ischecked = value;
NotifyPropertyChanged("IsChecked");






public class Person : ObservableCollection<People>
public class Group : INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propName)

if (PropertyChanged != null)

PropertyChanged(this, new PropertyChangedEventArgs(propName));



private string groupname;
public string GroupName

get return groupname;
set

if (groupname == value)

return;

else

groupname = value;
NotifyPropertyChanged("GroupName");




private Person groupmember = new Person();

public Person GroupMember

get return groupmember;
set

if (groupmember == value)

return;

else

groupmember = value;
NotifyPropertyChanged("GroupMember");





private int membercount = 0;
public int MemberCount

get return membercount;
set

if (membercount == value)

return;

else

membercount = value;
NotifyPropertyChanged("MemberCount");




private bool? ischecked = false;
public bool? IsChecked

get return ischecked;
set

if (ischecked == value)

return;

else

ischecked = value;
NotifyPropertyChanged("IsChecked");
NotifyMember(ischecked);




private void NotifyMember(bool? ischeck)

if (groupmember.Count > 0)

foreach (People p in groupmember)

p.IsChecked = ischeck;




public class GroupList : ObservableCollection<Group>

还是给你整个文件吧追问

你把你那个发给我嘛。 我QQ1078669816,麻烦了

追答

这个真不可以。这可是我们要做的项目。功能代码可以给你。整个程序是不行的。有什么不懂的可以问我。我们公司封QQ。只能百度Hi聊

Android Checkbox listview全选(禁用/启用)[重复]

【中文标题】Android Checkbox listview全选(禁用/启用)[重复]【英文标题】:Android Checkbox listview select all (disable/enable) [duplicate] 【发布时间】:2011-05-31 23:47:36 【问题描述】:

我想禁用/启用列表视图中的所有复选框。事实上,希望通过单击顶部复选框来选择所有行为。

谢谢

【问题讨论】:

【参考方案1】:
for(int i=0; i < listView.getChildCount(); i++)
    RelativeLayout itemLayout = (RelativeLayout)listView.getChildAt(i);
    CheckBox cb = (CheckBox)itemLayout.findViewById(R.id.MyListViewCheckBox);
    cb.setChecked(true);

您需要编辑此代码以处理启用和禁用,但我希望您明白这一点!

此外,这只检查每个复选框,确保您从列表中返回一个 id 或对象,以便将数据发送/保存到其他地方。

【讨论】:

排序.. 非常感谢 Abhinav.. 非常感谢 当我选中所有项目然后取消选中一项时,此代码会产生一些奇怪的行为。 Thom Nichols 的解决方案更好。 我的列表视图中有按钮。单击列表视图之外的按钮时,我需要更改列表视图中存在的整个按钮的背景。我使用了您的代码,但出现错误。如何做到这一点。 这只会检查当前正在查看的项目。因此,如果您的 listView 包含的项目多于视图可以显示的项目,则不会检查所有项目。 Thom Nichols 的回答确实是正确的解决方案。 像魅力一样工作【参考方案2】:

这最终对我有用,我使用光标适配器,而不仅仅是 ArrayListAdapter 用于我的列表项:

final ListView list = getListView();
for ( int i=0; i< getListAdapter().getCount(); i++ ) 
        list.setItemChecked(i, true);

list.getChildCount 不起作用,因为它似乎只计算立即绘制的内容(而不是屏幕外的所有内容),因此当整个列表包含 100 个或更多项目时,childCount 可能只有 6 或 8 个项目。另外,因为我必须使用 list.setItemChecked 来让项目“保持检查”——至少在我的列表项目是 CheckedTextView 的实例的情况下。

【讨论】:

如何使用这样的按钮? 谢谢你.. 因为 childCount,我遇到了麻烦【参考方案3】:

只需在适配器中添加一个参数为

Boolean Ex.MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, false);
listview.setAdapter(adapter);

在选择所有按钮单击监听器时添加此代码

MyAdapter adapter = new Save_Weight_Adapter(this, R.layout.layoutname, array, true);
listview.setAdapter(adapter);

并签入适配器

if(chk) 
    blue_check.setVisibility(View.VISIBLE);
 else 
    blue_check.setVisibility(View.GONE);

【讨论】:

【参考方案4】:

我认为您应该在 UI 线程之外运行这个长时间运行的任务。当您单击 OnClickListener 中的按钮时:

new Thread(new Runnable() 
                    @Override
                    public void run() 
                        for (int i = 0; i < list.getAdapter().getCount(); i++) 
                            final int position = i;
                            mHandler.post(new Runnable() 
                                @Override
                                public void run() 
                                    list.setItemChecked(pos, true);  
                                
                            );
                        
                    
                ).start();     

在 onCreate() 中:

this.mHandler = new Handler();

列表视图中的每个项目都应该是 Checkable ,就像实现 Checkable 接口的 CheckableRelativeLayout 一样。

【讨论】:

以上是关于wpf ListView 中checkBox全选 如何实现?的主要内容,如果未能解决你的问题,请参考以下文章

WPF: 实现带全选复选框的列表控件

Android Checkbox listview全选(禁用/启用)[重复]

Android 带checkbox的listView 实现多选,全选,反选

Android高级控件——ListView绑定CheckBox实现全选,添加和删除等功能

WPF DataGrid CheckBox 多选 反选 全选

WPF DataGrid CheckBox 多选 反选 全选