Ok, so using nullable bool is an OLV requirement right?
But shouldn't something this work to achieve what you want?
class Entity {
private bool? _CheckState;
public List<Entity> ChildEntities { get; set; }
public Entity() {
_CheckState = false;
ChildEntities = new List<Entity>();
}
public bool? CheckState {
get {
if (_CheckState == true) {
return true;
} else if (ChildEntities.All(child => child.CheckState == false)) {
return false;
} else {
return null;
}
}
set { _CheckState = value; }
}
}