WPF: передача значений в правила валидации из связанных данных - PullRequest
5 голосов
/ 02 августа 2010

Быстрый вопрос. В WPF настроен валидатор, который проверяет, находится ли значение в определенном диапазоне. Это прекрасно работает. Смотрите код ниже:

<TextBox Name="valueTxt" Style="{StaticResource SquareBox}" GotKeyboardFocus="amountTxt_GotKeyboardFocus" GotMouseCapture="amountTxt_GotMouseCapture" LostFocus="boxLostFocus" Height="25" Width="50">
                            <TextBox.Text>
                                <Binding Path="UnitCost" NotifyOnValidationError="True">
                                    <Binding.ValidationRules>
                                        <local:ValidDecimal MaxAmount="1000"></local:ValidDecimal>
                                    </Binding.ValidationRules>
                                    <Binding.Converter>
                                        <local:CurrencyConverter addPound="False" />
                                    </Binding.Converter>
                                </Binding>
                            </TextBox.Text>
                        </TextBox>

Однако я хотел бы передать валидатору другой фрагмент данных из данных, которые связаны. Я предположил, что я мог бы просто добавить это к делькарации валидатора следующим образом:

<local:ValidDecimal MaxAmount="1000" SKU="{Binding Path=tblProducts.ProductSKU}"></local:ValidDecimal>

Однако, похоже, я не могу получить доступ к значению SKU таким образом.

Есть предложения?

Спасибо

EDIT Может быть, стоит отметить, что SKU - это просто строка, объявленная в моем валидаторе, например:

public class ValidDecimal : ValidationRule
{
    public int MaxAmount { get; set; }
    public string SKU { get; set; }

    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        //validate the value as a decimal in to two decimal places
        string cost = (string)value;
        try
        {

            decimal decCost = decimal.Parse(cost);
            if (SKU != "85555")
            {
                if (decCost <= 0 || decCost > MaxAmount)
                {
                    return new ValidationResult(false, "Amount is not within valid range");
                }
            }
            return new ValidationResult(true, null);

        }
        catch (Exception ex)
        {
            return new ValidationResult(false, "Not a valid decimal value");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...