使用列表框项目中的复选框,如何选中和取消选中列表框中的所有复选框?
<ListBox Height="168" HorizontalAlignment="Left" Margin="45,90,0,0" Name="listBox1" VerticalAlignment="Top" Width="120">
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding Ck, Mode=TwoWay}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DataBinding是:
List<uu> xx = new List<uu>();
xx.Add(new uu { Name = "A", Ck = false });
xx.Add(new uu { Name = "A", Ck = false });
listBox1.ItemsSource = xx;
更新:
是否可以做这样的事情:
foreach (ListBoxItem item in listBox1.Items)
{
CheckBox ch = (CheckBox)item;
ch.IsChecked = true;
}
答案 0 :(得分:4)
要考虑的几件事情。
1)首先使用ObservableCollection(首选)或BindingList而不是List作为数据源
2)确保在课堂上实施INotifyPropertyChanged。查看示例here
3)现在您已正确进行绑定设置,循环访问集合并使用foreach或其他循环将checked属性设置为false。绑定系统将处理其余部分,列表中的更改将在UI上正确反映
更新:添加了简短的代码示例
在您的代码隐藏中:
ObservableCollection<uu> list = new ObservableCollection<uu>();
MainWindow()
{
InitializeComponent();
// Set the listbox's ItemsSource to your new ObservableCollection
ListBox.ItemsSource = list;
}
public void SetAllFalse()
{
foreach (uu item in this.list)
{
item.Ck = false;
}
}
在uu类中实现INotifyPropertyChanged:
public class uu: INotifyPropertyChanged
{
private bool _ck;
public bool Ck
{
get { return _ck; }
set
{
_ck = value;
this.NotifyPropertyChanged("Ck");
}
}
private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
答案 1 :(得分:1)
您通常只会使用数据绑定,如下所示。
List<uu> items = listbox1.ItemsSource as List<uu>();
foreach (var item in items)
item.Ck = true;
我从您的数据绑定中推断出Ck
变量名,并从示例代码中推断出ItemsSource类型。