У меня есть 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.
Есть идеи?