选中WPF中的全选复选框不会更改列表框中的其他复选框

时间:2017-07-11 13:07:35

标签: c# wpf listbox

我使用thisthis实施了ListBox。我将29个对象的实际列表绑定到它,它运行良好。 在XAML中:

<ListBox Name="WBauNrList" ItemsSource="{Binding}"  Grid.Row="7" Grid.Column="2" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True" Height="100" >
    <ListBox.ItemTemplate>
        <HierarchicalDataTemplate>
            <CheckBox Content="{Binding Baunr}" IsChecked="{Binding IsChecked,Mode=TwoWay}"/>
        </HierarchicalDataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在代码中:

datenpunktList = new ObservableCollection<Datenpunkt>();
foreach (var d in WerkstattList.DistinctBy(p => p.lokNr))
{
    var newd = new Datenpunkt() { Baunr = d.lokNr };
    datenpunktList.Add(newd);
}

WBauNrList.ItemsSource = datenpunktList;

但问题是:

我想要一个全选CheckBoxes,以便用户能够选择和取消选择所有项目。它的工作很奇怪!

检查selectAll CheckBox后,将检查不在滚动条范围内的所有项目(滚动列表),然后我应向下滚动以查看是否已检查所有项目。

XAML:

<CheckBox Name="selectAll" Click="selectAll_Click" >Secelct all</CheckBox>

代码:

private void selectAll_Click(object sender, RoutedEventArgs e)
{
    foreach (Datenpunkt item in WBauNrList.Items)
    {
        item.IsChecked = true ;
    }
}

我不知道该怎么做。

提前谢谢,莫

1 个答案:

答案 0 :(得分:3)

您的财产IsChecked实施可能如下所示。

public class Datenpunkt : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public void Notify(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private bool _isChecked;
    public bool IsChecked
    {
        get { return _isChecked; }
        set
        {
            _isChecked = value;
            Notify("IsChecked");
        }
    }
}

有关详细信息,请查看MSDN INotifyPropertyChanged页面。