我有一个datagrid,其中一个标题列是三态复选框.该列的celltemplate包含两个状态复选框+ AllItems CheckBox - Item1 - Item2 - Item3 ..我想使用AllItems复选框来选择/取消选择工作正常的所有项目(item1,item2).接下来,我想在未选择/取消选择所有项目时将AllItems复选框设置为中间状态.同样,我想在手动选择所有项目时将AllItems复选框设置为选中/取消选中.
这是我试过的代码......
<dg:DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel x:Name="StackPanelForItemCheckbox" Orientation="Horizontal">
<CheckBox x:Name="AllItemSelectionCheckBox" HorizontalAlignment="Left" Cursor="Hand"
IsChecked="{Binding IsAllItemChecked, Mode=TwoWay}"
IsThreeState="True" Checked="ItemSelectionCheckBox_Checked"
Unchecked="ItemSelectionCheckBox_Unchecked"
Click="AllItemSelectionCheckBox_Click">
<TextBlock x:Name="ItemNameTextBlock" Text="Item" Margin="10,0,0,0">
......
<dg:DataGridTemplateColumn.CellTemplate>
<DataTemplate x:Name="ItemCheckDataTemplate">
<StackPanel x:Name="ItemCheckBoxStackPanel" Orientation="Horizontal">
<CheckBox x:Name="itemCheckBox" Cursor="Hand" IsChecked="{Binding IsItemChecked, Mode=TwoWay}" Click="ItemSelectionCheckBox_Click"></CheckBox>
<TextBlock x:Name="ItemNameTextBlock" Text="{Binding Path=Item}"> </TextBlock>
</StackPanel>
</DataTemplate>
...
Run Code Online (Sandbox Code Playgroud)
"ItemSelectionCheckBox_Click"方法查找所有三个状态(全部检查,未检查,中间)并设置"IsAllItemChecked"属性,即INotifyproperty.这是行不通的.我可能尝试的其他替代方法是找到"AllItems"元素并从代码中设置它.无法在网络上找到类似的内容.几乎没有例子,但TreeView并不是我尝试的方式.有帮助吗?
PS >>
我想要的第一件事是允许"AllItemSelectionCheckBox"在手动选择时只有两个状态(True,False).
private void AllItemSelectionCheckBox_Click(object sender, RoutedEventArgs e)
{
var cb = e.Source as CheckBox;
if (!cb.IsChecked.HasValue)
cb.IsChecked = false;
}
Run Code Online (Sandbox Code Playgroud)