0

私はこのビューモデルを持っています:

    public class BankAccountViewModel : IValidator<BankAccountViewModel>
    {
      public BankAccount BankAccount { get; set; }

public void ConfigureValidation(ValidationConfiguration<StockOnHandViewModel> config)
        {
            config.For(m => m.BankAccount.AccountHolder);

        }
    }

したがって、クラスは次のとおりです。

public class BankAccount
{
  public string AccountHolder { get; set; }
  public List<Transfer> Transfers { get; set; }
}

public class Transfer
{
  public int Amount { get; set; }
}

次に、検証用の拡張機能がいくつかあります

public static class ValidationExtensions
    {
  public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
            this ValidationConfiguration<TModel> validationConfiguration,
            Expression<Func<TModel, TProperty>> accessor)
        {
            return validationConfiguration.Add(accessor);
        }
}

そのため、AccountHolderのForメソッドを呼び出すことができました。config.For(m => m.BankAccount.AccountHolder);

かっこいいです。期待通りに式を送信します。

リストアイテムの転送は少し難しくなります。

転送では、各転送の金額の式を介して送信したい場合があります。したがって、転送が2つある場合は、次のように送信します。

m => m.BankAccount.Transfers[0].Amount
m => m.BankAccount.Transfers[1].Amount

私はこの方法でそれを行うことができることを知っています:

for(int i=0; i < BankAccount.Transfers.Count; i++)
            {
                config.For(m => m.BankAccount.Transfers[i].Amount);
            }

ただし、リストアイテムに対してこれを常に実行したくはありません。

私は本当にFor、リストアイテムに対して別の方法を使用したいと思っています。これは、なんらかの方法で呼び出すことができ、それによって私に代わって実行されます。

私は多分次のようなことを考えていました:

public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
            this ValidationConfiguration<TModel> validationConfiguration,
            Expression<Func<TModel, TProperty>> accessor, int count)
        {
...
}

あなたはおそらくそれを次のように呼ぶでしょう:

config.For(m => m.BankAccount.Transfers[i].Amount, BankAccount.Transfers.Count);

ただし、iなしで式の部分を送信し、後で各リストアイテムに入力する方法がわからないため、これは機能しません。また、メソッドで何をすべきかわからない

誰もがここで何をすべきか知っていますか?

4

1 に答える 1

1

リストを返すようにするのは簡単なようです。

public static PropertyRuleSet<TModel, TProperty> For<TModel, TProperty>(
            this ValidationConfiguration<TModel> validationConfiguration,
            Expression<Func<TModel,IEnumerator<TProperty>>> accessor)
        {
...
}

そしてこれ:

config.For(m => m.BankAccount.Transfers.Select(t => t.Amount));

私はそれをテストしていないので、タイプミスがあるかもしれません。

于 2012-08-14T23:02:27.677 に答える