【发布时间】:2016-03-17 21:23:07
【问题描述】:
我是 WFP 的新手,我正在做一个 MVVM 项目并试图弄清楚...我阅读了很多关于验证的内容,但没有找到我想要的。 我不想将验证逻辑放在 ViewModel 或 View 中。我想将验证保留在业务逻辑层中,并且只有在那里,这是一个单独的项目,大概可以与任何数据源或 UI 一起使用,因此我不能将 WPF 特定的东西放入其中。 我想使用 FluentValidation 但我不知道如何在我的 ViewModel 中链接它。 假设我有一个包含一个字段的输入表单,Save 按钮正在从业务逻辑请求 Save 方法,如果字段为空并带有相应的消息(“请输入一些内容”),业务逻辑会抛出 ValidationException。 如何将其链接到 View/ViewModel 以将其反映给用户?
感谢任何帮助,如果问题很愚蠢,对不起,这个 WPF 很难:)
编辑,回复约翰·奥多姆:我已经到了在我的 ViewModel 中我有保存命令的地步,它执行类似的操作
try
{
EditedItem= itemService.PersistItem(EditedItem);
}
catch (ValidationException ex)
{
foreach (var result in ex.Errors)
{
Console.WriteLine("Property name: " + result.PropertyName);
Console.WriteLine("Error: " + result.ErrorMessage);
Console.WriteLine("");
}
}
我想将 CATCH 部分中的信息与我的视图相关联,并向用户显示错误信息
【问题讨论】:
-
您好,欢迎来到 StackOverflow!您能否向我们展示您到目前为止所做的尝试?
-
这样做有什么具体原因吗?因为 MVVM 的目的是将这些关注点从业务逻辑中分离出来。
-
验证对我来说是业务逻辑的一部分。如果我想为同一个系统创建一个 Web UI,我将不得不复制验证。除非我错过了什么……
-
如果您验证 用户输入,则验证部分是 View 或 ViewModel 的工作。业务逻辑应该验证您自己的错误,例如空值检查。为了可重用性,您可以创建ValidationRule 并在您的视图中使用它们。
-
我可以在单独的程序集中使用这些 ValidationRules 吗?例如,我不希望我的 WPF UI 视图“知道”有效的年龄范围是 21-130,如该示例所示。如果我有那个,然后有另一个网络界面,我也必须在那里重复 21-130 信息。这种验证逻辑我只想提供一次,并且在 WPF UI 程序集之外。用户输入验证可能是 View/ViewModel 的工作,让他们去做,但是关于什么是有效的,什么是无效的信息我仍然认为是业务逻辑工作
标签: wpf validation mvvm