父节点的选中或取消选中,所有子节点,下层节点都选中或取消选中。
子节点里一个选中,则父节点选中,子节点全部取消选中,父节点才会取消选中。
UpDown updown = UpDown.down;
private void checkChildren(PermissionInfo group, bool isselected)
{
updown = UpDown.down;
if (group.Nodes.Count() > 0)
{
foreach (PermissionInfo gropchild in group.Nodes)
{
gropchild.IsSelected = isselected;
if (gropchild.Nodes.Count() > 0)
checkChildren(gropchild, isselected);
}
}
}
private void checkParent(PermissionInfo group, bool isselected)
{
updown = UpDown.up;
if (group.Parnet != null)
{
if (isselected == true)
{
group.Parnet.IsSelected = isselected;
checkParent(group.Parnet, isselected);
}
else
{
var items = group.Parnet.Nodes.Where(x => x.IsSelected != isselected && x.Code != group.Code);
if (items.Count() == 0)
{
group.Parnet.IsSelected = isselected;
if (group.Parnet.Parnet != null)
{
checkParent(group.Parnet, isselected);
};
}
}
}
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
CheckBox s = sender as CheckBox;
PermissionInfo group = s.DataContext as PermissionInfo;
if (group == null) return;
bool ischecked = (bool)s.IsChecked;
if (updown == UpDown.down)
{
checkChildren(group, ischecked);
checkParent(group, ischecked);
}
else
{
checkParent(group, ischecked);
}
updown = UpDown.down;
}