0

我的项目示例中有一个名为 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");
        }
    }
}

它运作良好。但是,我不想将 MainViewViewModel 硬编码,而是将其作为参数传递给 Validate Method。所以我也可以将这个类用于其他 ViewModel。

如果有更好的解决方案,然后将 ViewModel 名称作为参数传递,请描述。

4

1 回答 1

1

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

例如:

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

这将做什么,每当你更新你的文本框,它会验证它,如果它无效,你会得到红色边框(或你设置的任何样式)和错误。

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

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

总而言之,我认为您应该阅读有关如何使用验证的内容,并修改您的逻辑和代码。

于 2013-10-29T07:14:52.157 回答