【发布时间】:2013-09-06 14:18:36
【问题描述】:
我有一个显示Company 类型对象层次结构的树视图。
Company 拥有(除其他外)属性Bool? Checked。我在每一行的复选框中使用该值。我希望该复选框(也)指示是否选择了任何孩子,但我不确定如何为Checked 属性构建Getter。
我猜问题是该值不仅代表当前对象的值,还代表子项的组合值。它可以解决还是我需要重新考虑?
这是我想要得到的结果:
- Checked = True(如果项目本身被选中)
- 检查 = 假(如果 未检查项目本身并且未检查所有孩子/孙子 检查)
- Checked = Null(如果项目本身没有被检查并且一些 检查孩子/孙子)
- Checked = Null(如果项目本身未选中且 ALL 检查孩子/孙子)
类公司:
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; }
}
【问题讨论】:
-
你不能只枚举getter中的孩子并检查他们的状态吗?但也许我没有得到你想要达到的目标。
-
是的,我可以枚举所有孩子。没问题。但它变得很棘手,因为每个孩子都可以有自己的孩子。我认为它的三态布尔与递归函数相结合,让我很困惑。我根本不知道如何编写一个返回正确值的递归函数!
-
我认为有一个简单的代码解决方案可以解决这个问题,涉及 XOR 和其他一些我必须掌握的东西。但现在我最终得到了 60 行代码,除了正确的结果之外,这些代码可以产生所有其他可以想象的结果 :)
标签: c# recursion objectlistview tri-state-logic