c# - visual - vs2017 15.9 3



檢查WPF中的全選複選框不會更改列錶框中的其他復選框 (1)

我用這個這個實現了一個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 ;
    }
}

我不知道該怎麼做。

在此先感謝,莫


你的財產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頁面以獲取更多信息。