我在我的Project Sample中有一個名爲ContainsValidationRule的類。我在這個項目中有一個名爲MainWindowViewModel的viewModel。代碼看起來像這樣:傳遞一個viewmodel類名作爲參數來驗證從ValidationRule類繼承的類的方法
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。所以我也可以將這個類用於其他ViewModels。
如果有更好的解決方案,然後傳遞ViewModel名稱作爲參數,請描述。
這篇文章(http://stackoverflow.com/questions/4345606/binding-datacontext-to-validationrule),可能會讓你感興趣。 – AirL
ValidationRule確實是驗證事物的「舊」風格方式。你應該看看'INotifyDataErrorInfo' – Shoe
我同意@Shoe,但我不得不承認......我無法弄清楚你在這裏驗證了什麼......你能否給我啓發? – Sheridan