将视图模型类名作为参数传递,以验证从验证规则类继承的类的方法

本文关键字:验证 规则 继承 方法 参数传递 模型 视图 | 更新日期: 2023-09-27 18:37:22

我的项目示例中有一个名为 ContainsValidationRule 的类。在这个项目中,我有一个名为MainWindowViewModel的视图模型。代码看起来像:

namespace Sample
{
    using System.Globalization;
    using System.Linq;
    using System.Windows.Controls;
    public class ContainsValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            var result = MainWindowViewModel.CurrentInstance.Items.Any(x => x.ToLower(cultureInfo).Contains((value as string).ToLower(cultureInfo)));
            return new ValidationResult(result, "No Reason");
        }
    }
}

效果很好。但是,与其硬编码MainViewModel,不如将其作为参数传递给Validate Method。所以我也可以将这个类用于其他视图模型。

如果有更好的解决方案,请将视图模型名称作为参数传递,请描述。

将视图模型类名作为参数传递,以验证从验证规则类继承的类的方法

好吧,我必须说你的代码有点令人困惑。通常,您将使用该值作为要验证的值。

例如:

<TextBox.Text>
 <Binding Path="SomeProperty" UpdateSourceTrigger="PropertyChanged">
     <Binding.ValidationRules>
         <validations:YourValidationName ValidatesOnTargetUpdated="True" />
     </Binding.ValidationRules>
 </Binding>
</TextBox.Text>

这将做什么,是每当您更新文本框时,它都会对其进行验证,如果它无效,您将获得红色边框(或您设置的任何样式)和错误。

因为另一方面,完全忽略您正在验证的对象,并将使用硬编码MainWindowViewModel.CurrentInstance.Items...来检查事物......

简而言之,object value是您的参数。

总的来说,我认为你应该阅读一些关于如何使用验证的文章,并修改你的逻辑和代码。