【问题标题】:Windows 8 Metro: Implementing ValidationWindows 8 Metro:实施验证
【发布时间】:2012-05-16 13:57:47
【问题描述】:

我只用谷歌搜索了大约 2 小时,没有找到任何东西。

鉴于以下情况:

public class Person
{
    [Required]
    public string Name { get; set; }
}

XAML:

<TextBox Text="{Binding Name, Mode=TwoWay}" />

您将如何像在 MVC3 中那样在 UI 上自动获取验证反馈?

(哦,我现在真的不在乎是否能够使用集成的 DataAnnotations,例如 [Required])

非常感谢任何帮助!

【问题讨论】:

    标签: xaml windows-8 windows-runtime winrt-xaml validation


    【解决方案1】:

    我在WinRT XAML Toolkit 中添加了一些内容。它被称为TextBoxValidationExtensions,允许您像这样定义验证:

    <TextBox
        Width="400"
        HorizontalAlignment="Left"
        xyzc:TextBoxValidationExtensions.Format="NonEmptyNumeric"
        xyzc:TextBoxValidationExtensions.InvalidBrush="Red"
        xyzc:TextBoxValidationExtensions.ValidBrush="Green" />
    

    格式目前定义为:

    [Flags]
    public enum ValidTextBoxFormats
    {
        Any = 0,
        NonEmpty = 1,
        Numeric = 2,
        NonEmptyNumeric = 3
    }
    

    整个代码有点太长了,不能在这里分享。您可以从 CodePlex 中取出代码并根据自己的喜好进行修改 - 添加新的验证规则、修改默认画笔等。

    【讨论】:

    • 看来这可以解决问题!无论如何,您能解释一下如何在代码中而不是在 XAML 中进行设置吗?
    • 如果您使用的是 MVVM,那么您将拥有某种具有 Text 和 Format 属性的字段视图模型,因此您只需设置绑定,如 xyzc:TextBoxValidationExtensions.Format="{Binding格式}”。如果您只是在后面编写代码,那么您将调用 TextBoxValidationExtensions.SetFormat(myTextBox, ValidTextBoxFormats.Numeric)。
    • Jerry Nixon 在他的博客here - Let’s Code! Handling validation in your Windows Store app 中描述了另一种解决方案。
    【解决方案2】:

    只需在特定的XAML 控件中使用事件,例如如果在textbox 中使用pointerexited 并在后面的代码中编写一个函数来执行所需的验证。

    【讨论】:

    • 虽然问题已经得到解答:您的建议会导致大量重复且难以维护的代码。 Filip Skakun(在接受的答案中!)已经完美回答。 :)
    【解决方案3】:

    根据框架中提供的支持,您“验证”文本字段的非凡想法似乎非常罕见和不常见,根本不需要考虑。我们都知道,如果您想做的事情是通用的或有用的,那么在这样一个设计良好且全面的框架中会考虑使用这样的功能。

    【讨论】:

    • 为什么不需要验证文本框,比如 URL、数字、基本电子邮件或其他任何内容?当然,您可以通过单击按钮进行验证并将所需的样式添加到文本框,但有时这不是所需要的。而且:仅仅因为它不在框架中并不意味着它不需要/不需要。
    • @Shion 找到字典并查找“讽刺”这个词
    • +1 为了讽刺 - 似乎是 .Net 开发人员唯一需要处理 WinRT 中所有明显缺失的事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多