簡體   English   中英

傳遞viewmodel類名作為參數來驗證從ValidationRule類繼承的類的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM