相邻复选框的验证逻辑

时间:2014-01-21 07:03:45

标签: .net wpf algorithm mvvm checkbox

人!

我有类似的东西:

4 Combobox

我需要编写一些验证逻辑。主要规则 - 用户只能选择相邻的复选框。例如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;}

1 个答案:

答案 0 :(得分:0)

感谢所有人的好主意,尤其是“范围”。 我喜欢2个组合框(来自/来自)变体,之后我在滑块控件上看到了2个拇指(f {。范围滑动在http://avaloncontrolslib.codeplex.com/中)

但在我的解决方案中,我将使用另一种方法(仅因为我有4个元素): 用户选择一些复选框(正确或不正确),之后(当他尝试保存更改时,f.e。)他可能会看到错误消息。 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个组合框/ TextBox从 - 到字段)