[英]passing a viewmodel class name as parameter to validate method of a class inheriting from ValidationRule class
我的項目示例中有一個名為ContainsValidationRule的類。 我在這個項目中有一個名為MainWindowViewModel的viewModel。 該代碼看起來像:
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名稱作為參數。
好吧,我必須說您的代碼有些困惑。 通常,您將使用該值作為您要驗證的值。
例如:
<TextBox.Text>
<Binding Path="SomeProperty" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<validations:YourValidationName ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
這樣做的目的是,每當您更新文本框時,它將對其進行驗證,如果無效,則會顯示紅色邊框(或您設置的任何樣式)和錯誤。
另一方面,對於,請完全忽略要驗證的對象,並將使用硬編碼的MainWindowViewModel.CurrentInstance.Items...
來檢查事物...
簡而言之, object value
就是您的參數。
總之,我認為您應該閱讀有關如何使用驗證的知識,並修改邏輯和代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.