1

我有一个 MVVM 应用程序,用户可以在其中注册一个人。要注册一个人,用户必须在提供的三个文本框中提供至少 2 个有效的电话号码。

“有效”电话号码至少包含 10 个号码。

我已经实现了 IDataErrorInfo,并且每当绑定的属性发生更改时,我的文本框都会进行验证。

我的问题与如何实际验证内容有关?

这构成了有效的输入:

Textbox 1 : 0123456789
Textbox 2 : 0123456789
Textbox 3 : {null}

原样

Textbox 1 : 0123456789
Textbox 2 : 0123456789
Textbox 3 : 0123456789

但是,这些无效:

Textbox 1 : 0123456789
Textbox 2 : 012345678
Textbox 3 : {null}

Textbox 1 : 0123456789
Textbox 2 : {null}
Textbox 3 : {null}

所以这实际上更像是一个编码问题而不是验证问题。

我到目前为止:

private string ValidateTelephoneNumbers()
{
    var hasNumber1 = BoundProperty1 != string.Empty;
    var hasNumber2 = BoundProperty2 != string.Empty;
    var hasNumber3 = BoundProperty3 != string.Empty;

    if (hasNumber1 && (hasNumber2 || hasNumber3) || (hasNumber2 && hasNumber3))
    {
        return null;
    }
    else
    {
        return "Specify at least 2 valid telephone numbers."
    }
}

它涵盖了要求的“指定至少两个”部分......但是有没有一种更优雅的方法来检查每个提供的数字的长度,而不是检查每个数字?

4

1 回答 1

1

我会这样做:

private string ValidateTelephoneNumbers()
{
    int number = 0;
    int validNumbers = 0;

    if (int.TryParse(BoundProperty1, out number) && number > 999999999)
        validNumbers++;
    if (int.TryParse(BoundProperty2, out number) && number > 999999999)
        validNumbers++;
    if (int.TryParse(BoundProperty3, out number) && number > 999999999)
        validNumbers++;

    if (validNumbers > 1)
    {
        return null;
    }
    else
    {
        return "Specify at least 2 valid telephone numbers.";
    }
}
于 2012-05-20T00:54:13.380 回答