У меня есть древовидная структура, которая отображает иерархию объектов типа Company
.Определить выбранный tristate
Company
имеет (среди прочих) имущество Bool? Checked
. Я использую это значение в флажке для каждой строки. Я бы хотел, чтобы флажок (также) указывал, были ли выбраны какие-либо дочерние элементы, но я не уверен, как построить Getter
для свойства Checked
.
Я думаю, проблема заключается в том, что значение не только отражает текущее значение объектов, но и комбинированное значение дочерних элементов. Разрешено ли мне или нужно переосмыслить?
Это результат я хотел бы получить:
- Проверено = True (если сам элемент проверяется)
- Проверено = False (если сам элемент не проверяется И все дети/внуки не проверено)
- Проверено = Нуль (Если элемент не проверен и НЕКОТОРЫЙ Чайлдс/внуков проверяются)
- Проверено = 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; }
}
Не можете ли вы просто перечислить детей в геттере и проверить их состояние? Но, возможно, я не понимаю, чего вы хотите достичь. –
Да, я могу перечислить всех детей. Нет проблем. Это становится сложно, потому что у каждого ребенка могут быть свои собственные дети. Я думаю, что его tristate-bool сочетается с рекурсивной функцией, которая меня смущает. Я просто не могу понять, как написать рекурсивную функцию, которая возвращает правильное значение! – David
Я думаю, что есть простое кодовое решение, связанное с XOR и некоторыми другими вещами, которые мне еще предстоит освоить. Но сейчас я заканчиваю на 60 строк кода, который дает все другие результаты, которые можно себе представить, кроме правильного :) – David