Определить выбранный тристат
У меня есть древовидная структура, которая отображает иерархию объектов типа Company
,
Company
имеет (среди прочего) собственность Bool? Checked
, Я использую это значение в флажке для каждой строки. Я хотел бы, чтобы флажок (также) указывал, были ли выбраны какие-либо дочерние элементы, но я не уверен, как построить Getter
для Checked
имущество.
Я предполагаю, что проблема в том, что значение представляет не только текущее значение объекта, но также и объединенное значение дочерних элементов. Это разрешимо или мне нужно переосмыслить?
Вот результат, который я хотел бы получить:
- Checked = True (если сам элемент отмечен)
- Checked = False (если сам элемент не отмечен, а все дети / внуки не отмечены)
- Checked = Null (Если сам элемент не отмечен, а НЕКОТОРЫЕ дети / внуки проверены)
- Checked = Null (если сам элемент не отмечен и проверены ВСЕ дочерние элементы / внуки)
Класс компании:
public class Company
{
public Company()
{
this.childs = new List<Company>();
}
public int ID { get; set; }
public string Title { get; set; }
public List<Company> childs { get; set; }
public int NrOfChilds { get { return childs.Count; } }
public bool Checked {
get { ??? }
set { this.Checked = value; }
}
1 ответ
Решение
Итак, использование nullable bool - это правильное требование OLV?
Но не должно ли что-то сработать для достижения того, чего вы хотите?
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; }
}
}