我同意 Bill Zhang 的观点,当您使用 MVVM 模式时,验证逻辑应该驻留在视图模型中。原因很多,但最主要的原因是视图的验证应该是可测试的,而且测试视图模型比测试视图容易得多。
讲完了,让我们看一些代码。您可以查看我在 CodeProject上的 Zip My Code 文章,我在该文章中在视图模型中进行了验证。我可以像这样注册一个验证器:
class ExcludeItemDialogViewModel : DialogViewModelBase
{
public ExcludeItemDialogViewModel(string title, string excludeItem)
{
AddValidator(() => ExcludedItem, new NotNullOrEmptyValidationRule());
// Code removed for clarity...
}
// Code removed for clarity...
}
调用 AddValidator 方法将为视图模型中的特定属性注册一个验证器,在本例中为 ExcludedItem。验证规则如下所示:
class NotNullOrEmptyValidationRule : IValidationRule
{
public string ErrorMessage { get; private set; }
public bool Validate(object value)
{
string valueText = value as string;
if (string.IsNullOrEmpty(valueText))
{
ErrorMessage = Resources.NotNullValidationRule_Error;
return false;
}
ErrorMessage = string.Empty;
return true;
}
}