Определить выбранный тристат

У меня есть древовидная структура, которая отображает иерархию объектов типа 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; }
    }
}
Другие вопросы по тегам