проверить значение ячейки на основе другого свойства этого элемента данных - PullRequest
1 голос
/ 15 марта 2012

У меня есть DataGrid, и у него есть DataGridTextColumn, в котором есть элементы, которые я хочу проверить на основе значения другой ячейки в той же строке. Столбец привязан к одному из свойств элемента данных. Другое свойство того же элемента данных содержит нечто вроде маски ввода. Валидация должна проверять новое значение с маской ввода для элемента данных текущей строки. Эта маска ввода не редактируется нигде на форме (нет необходимости отслеживать изменения маски ввода), но маска ввода может быть разной для каждой строки. Так как мне написать такой валидатор? Я пробовал следующее:

<DataGridTextColumn Width="*">
                    <DataGridTextColumn.Binding>
                        <Binding Path="Name" Mode="TwoWay" UpdateSourceTrigger="LostFocus" ValidatesOnExceptions="True" NotifyOnValidationError="True" ValidatesOnDataErrors="True">
                            <Binding.ValidationRules>
                                <validation:Class2 ValidatesOnTargetUpdated="True" Format="999" />
                            </Binding.ValidationRules>
                        </Binding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>

А вот и код валидатора:

 class Class2 : ValidationRule
    {        
        /// <summary>
        /// input mask
        /// </summary>
        public string Format { get; set; }

    /// <param name="value">cell's new value that should be validated against input mask</param>        
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        // validation logic goes here
        return new ValidationResult(true, null);
    }
}

Но похоже, что я не могу связать свойство Class2.Format с элементом данных, потому что Class2 не наследуется от DependencyObject. Я думаю, что я мог бы решить эту проблему, если бы я просто инициировал все значения Format вручную из кода C #, но я думаю, что должны быть лучшие решения, использующие выражения привязки XAML.

Есть идеи?

1 Ответ

1 голос
/ 16 марта 2012

Я должен использовать что-то другое ValidationStep = "RawProposedValue", тогда я получу BindingExpression в качестве параметра значения в моем методе Validate, и это свойство BindingExpression.DataItem содержит фактический элемент данных, который я ищу.

...