【问题标题】:Validation logic for adjacent checkboxes相邻复选框的验证逻辑
【发布时间】:2014-01-21 19:17:55
【问题描述】:

伙计们!

我有类似的东西:

我需要编写一些验证逻辑。主要规则 - 用户只能选择相邻的复选框。例如 1;2;3 或 2;3 或 3;4 等(不要选择 1;3 或 1;2;4 等(无间隙))。 而且我不知道,我怎样才能简单地实现该算法。

我使用 MVVM 方法,这是我的 ViewModel 类(短)的一部分:

public bool FirstIsCheck {get;set;}
public bool SecondIsCheck {get;set;}
public bool ThirdIsCheck {get;set;}
public bool FourthIsCheck {get;set;}

【问题讨论】:

  • 将检查的值设为bool数组,然后检查是否所有的值都是假的,或者循环中是否有相邻的真值。这里潜伏着一个 UI 噩梦:用户怎么知道她只能选中相邻的框?所以你应该使用上面的逻辑在选中一个框时将不相邻的复选框变灰。这应该排除检查无效复选框 - 并使用户清楚逻辑。
  • 循环的想法似乎很有趣。并且这个控件将被一个特殊的用户使用,他必须知道这个规则(但可能会出错)
  • 用户只能选择一个CheckBox或者必须是>= 2
  • 从 1 到 4(默认为 0)
  • 这相当于选择一个范围——两个组合框(从/到)可能是一个更好的界面。

标签: .net wpf algorithm mvvm checkbox


【解决方案1】:

感谢大家的好主意,尤其是关于“范围”的想法。 我喜欢 2 个组合框(从/到)变体,在它们之后,我在滑块控件上看到了 2 个拇指(例如 http://avaloncontrolslib.codeplex.com/ 中的 RangeSlider)

但在我的解决方案中,我将使用另一种方法(仅因为我有 4 个元素): 用户选择一些复选框(正确或不正确),然后(当他尝试保存更改时,例如)他可能会看到错误消息。 IsChecked 值将被添加到集合中,我们找到 Max of Min 值 + 检查它们。 (在那个例子中,我使用字符串来保存最终结果)

        string temp = "";
        List<int> range = new List<int>();
        if (FirstIsCheck) { temp += 1 + ";"; range.Add(1); }
        if (SecondIsCheck) { temp += 2 + ";"; range.Add(2); }
        if (ThirdIsCheck) { temp += 3 + ";"; range.Add(3); }
        if (FourthIsCheck) { temp += 4 + ";"; range.Add(4); }

        Result = temp;

        if(range.Count>1)
        {
            var max = range.Max();
            var min = range.Min();

            if (max - min == 2 && range.Count != 3) throw new Exception();
            if (max - min == 3 && range.Count != 4) throw new Exception();
        }

在我的情况下它是有效的,但如果你有更多的元素,那么这种方法会很丑陋。 (并且您必须考虑使用一些滑块控件,或 2 个组合框/文本框从到字段)

【讨论】:

    猜你喜欢
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多