Windows 10(通用 Windows 应用程序)数据验证

4

我试图找出如何在UWP下进行数据验证,但根据我的研究,目前基本上没有我可以实现的东西。

因此,我尝试实现自定义验证逻辑。我现在遇到的问题是,我只在一个 TextBlock 上显示错误信息,而不是直接在包含数据错误的特定 TextBox 下方。

这是我目前所做的:

public class Customer : ViewModel
{
    private string _Name = default(string);
    public string Name { get { return _Name; } set { SetProperty(ref _Name, value); OnPropertyChanged("IsValid"); } }


    private string _Surname = default(string);
    public string Surname { get { return _Surname; } set { SetProperty(ref _Surname, value); OnPropertyChanged("IsValid"); } }

    private DateTime _DateOfBirth = default(DateTime);
    public DateTime DateOfBirth { get { return _DateOfBirth; } set { SetProperty(ref _DateOfBirth, value); OnPropertyChanged("IsValid"); } }

    public int ID { get; set; }

    public bool IsValid
    {
        get
        {
            //restart error info
            _ErrorInfo = default(string);
            if (string.IsNullOrWhiteSpace(Name))
                _ErrorInfo += "Name cannot be empty!" + Environment.NewLine;

            if (string.IsNullOrWhiteSpace(Surname))
                _ErrorInfo += "Surname cannot be empty!" + Environment.NewLine;

            //raise property changed
            OnPropertyChanged("ErrorInfo");

            return !string.IsNullOrWhiteSpace(Name) &&
                !string.IsNullOrWhiteSpace(Surname);
        }
    }


    private string _ErrorInfo = default(string);
    public string ErrorInfo { get { return _ErrorInfo; } set { SetProperty(ref _ErrorInfo, value); } }

}

问题:

我该如何调整我的代码,以便于不是把所有的错误信息都放在一个标签下,而是将每个文本框下的标签分开,并在那里显示验证错误?我应该使用字典吗?如果是,那么我该如何将它绑定到我的视图上?


https://github.com/Windows-XAML/Template10.Validation - Jerry Nixon
3个回答

5
您可以在文本框内创建一个弹出框。如果输入错误且文本框失去焦点,弹出框将显示。您可以设置弹出框在文本框上方/下方/侧面的位置。flyout祝您好运!

5

0
Prism的问题在于它使用字符串索引器。但是,在uwp中绑定只允许整数索引...不能使用字符串!还有一些关键功能缺失,例如实体视图模型之间以及它们与上下文之间的协调。
我已经进行了一些研究,似乎以下是UWP中良好验证器的关键要素: - 使用字符串作为绑定目标,以避免丢失转换异常 - 将转换错误与验证错误分开跟踪 - 验证视图模型的基类和自动生成的派生类指定属性名称 - 事件将多个视图模型绑定在一起,以便UI的多个部分保持一致 - 与上下文相关联的集中式错误计数和保存/恢复能力
有没有什么工具可以做到这一点?如果有,那么我还没有找到。
sjb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接