CoerceValue действительно должен использоваться для фиксации значения (например, ограничить его минимальным и максимальным значением).Я не знаю, вызовет ли исключение сбой приложения (вам просто нужно проверить это, чтобы выяснить это), или фреймворк справится с этим, но я бы не стал его рекомендовать, потому что это противоречило бы хорошей практике кодирования.
Чтобы получить дополнительную информацию для ValidateValue, вам иногда приходится определять дополнительные поля в вашем классе.Вы можете либо связать эти поля, либо установить их до установки значения для вашего DP, затем в ValidateValue вы можете получить доступ к этим полям и получить необходимую дополнительную информацию.Это дополнительное поле, создающее и передающее информацию через промежуточные «слои», кажется Microsoft вполне приемлемым, потому что именно так они (недальновидно) разработали структуру.
Я приведу пример новой сетки данных WPF.Если вы пойдете по стандартному маршруту и определите RowValidationRule, вы ожидаете, что у вас будет доступ к заказу ItemsSource (ваша таблица), чтобы определить, существует ли уже заданное значение в вашей строке в таблице.Это очень стандартная вещь, но эта информация не предоставляется в обратном вызове проверки.Таким образом, вы должны создать поле в своем классе проверки, к которому вы можете привязать ItemsSource DataGrid, после чего вы сможете получить доступ к этому полю во время проверки ...