Windows 10(通用Windows应用程序)数据validation

我试图弄清楚如何在UWP下进行数据validation,但根据我发现的情况,基本上没有什么我可以实现的。

因此,我试图实现我的自定义validation逻辑。 我现在遇到的问题是,我在一个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); } } } 

题:

如何调整我的代码,以便不是让一个标签包含所有错误信息,我可以在每个文本框下分配标签并在那里显示validation错误? 我应该使用字典吗? 如果是,我如何将其绑定到我的视图?

我很快成为使用Prism的粉丝,看到这个精彩的演示用户输入validation与Prism和UWP上的数据注释 。

它比我在这里输入的任何东西都要好。

您可以在文本框中制作弹出窗口。

一旦文本框失去了错误输入的焦点,弹出按钮就会显示出来。

您可以在文本框的顶部/底部/侧面设置弹出窗口的平面。

飞出去

祝你好运!

Prism的问题在于它使用字符串索引器。 但是在uwp中绑定只是不允许字符串索引…只有整数! 还缺少一些关键function,例如实体视图模型之间以及它们与上下文之间的协调。

我做了一些R&D,看起来以下是uwp中一个好的validation器的关键元素 – 使用字符串作为绑定目标,以避免丢弃转换exception – 跟踪转换错误与validation错误分开 – validation视图的基类model和自动生成的派生类,指定属性名称 – 将多个视图模型绑定在一起的事件,以便ui的多个部分保持一致 – 与上下文关联的集中错误计数和保存/恢复能力

有什么可以做到的吗? 如果是这样,那么我还没有找到它。

SJB