我有一个 ListView ,每个项目都有一个 CheckBox 控件作为其 ItemTemplate 的一部分。
<ListView x:Name="taskListView" Grid.Row="2" BorderThickness="0" Margin="30,0,0,0" ItemsSource="{Binding ChildItems}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="290"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" HorizontalAlignment="Center"></CheckBox>
<TextBlock Text="{Binding Name}" MaxWidth="270" Grid.Column="1" Margin="0,0,10,0"/>
<ComboBox SelectedItem="{Binding DependentTask, Mode=TwoWay}"
Grid.Column="2"
Margin="0,3,0,3"
ItemsSource="{Binding DependentTasks, Converter={StaticResource addEmptyItemConverter}}"
HorizontalAlignment="Left"
MinWidth="150"
DisplayMemberPath="ProjectionTaskLink.Name"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
此 ListView 的父级也有一个复选框。当选中该父复选框时,我想选中 ListViewItems 中的所有复选框。如何在代码隐藏中获取这些内容,以便根据父条件将它们设置为“已选中”或“未选中”?
谢谢。
编辑:这是完整的 XAML:
<Grid Margin="0,10,0,0">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="20"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="400"/>
<ColumnDefinition Width="35"/>
<ColumnDefinition Width="35"/>
</Grid.ColumnDefinitions>
<CheckBox HorizontalAlignment="Center" Grid.Column="0" Checked="CheckBox_Checked"/>
<TextBlock Text="{Binding Name}" Grid.Column="1"/>
<TextBlock Text="Loops " Grid.Column="2" TextAlignment="Center"/>
<TextBox Text="{Binding Scenarios}" Grid.Column="3"/>
</Grid>
<TextBlock Visibility="{Binding ContainsProjectionTasks, Converter={StaticResource boolToVisibilityConverter}}"
HorizontalAlignment="Left"
Width="450"
TextAlignment="Right"
VerticalAlignment="Bottom"
Grid.Row="1"
Text="Task Dependencies"
Background="White"/>
<ListView x:Name="taskListView" Grid.Row="2" BorderThickness="0" Margin="30,0,0,0" ItemsSource="{Binding ChildItems}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25"/>
<ColumnDefinition Width="290"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" HorizontalAlignment="Center"></CheckBox>
<TextBlock Text="{Binding Name}" MaxWidth="270" Grid.Column="1" Margin="0,0,10,0"/>
<ComboBox SelectedItem="{Binding DependentTask, Mode=TwoWay}"
Grid.Column="2"
Margin="0,3,0,3"
ItemsSource="{Binding DependentTasks, Converter={StaticResource addEmptyItemConverter}}"
HorizontalAlignment="Left"
MinWidth="150"
DisplayMemberPath="ProjectionTaskLink.Name"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
最佳答案
让 ChildItems 的元素实现 INotifyPropertyChanged。
向这些元素添加一个名为 IsChecked 的属性,这会在 setter 中引发 NotifyPropertyChangedEvent。
将 ListViewItem 的复选框绑定(bind)到 IsChecked 属性
我假设您已经在处理父复选框上的选中事件。因此,您现在需要做的就是将其添加到代码隐藏方法中:
(foreach YourType item in ChildItems)
item.IsChecked = parentCheckbox.IsChecked;
或者您可以尝试(其中parentCheckboxName 是主复选框的x:Name。
<CheckBox IsChecked="{Binding Path=IsChecked, ElementName=parentCheckboxName}" Grid.Column="0" HorizontalAlignment="Center" />
关于c# - 在CodeBehind中获取ListViewItem控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920430/