如何选中和取消选中列表框的选中框项?

时间:2011-11-22 18:52:02

标签: c# wpf xaml checkbox listbox

使用列表框项目中的复选框,如何选中和取消选中列表框中的所有复选框?

<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;
        }

2 个答案:

答案 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类型。