- в моем сценарии у меня есть сервер данных Linq2SQL.
мои Dataobjects реализуют IDataErrorInfo для перехвата ошибок, подобных Name==null
(быстрое выполнение правил Validation, которые требуют только значения, пока ничего особенного)
Объекты данных организованы в виде древовидной структуры, поэтому у каждого есть Родитель и Дочерние элементы
Как я могу проверить, является ли выбранное имя уникальным для потомков родителя объекта данных?
Проблема, с которой я сталкиваюсь, заключается в том, что для проверки уникального имени требуется обратная поездка в базу данных, в которой задержка при наборе текста UpdateSourceTrigger="PropertyChanged"
связана с привязкой TextBox к имени.
С другой стороны, я мог бы установить UpdateSourceTrigger="LostFocus"
, но проблема в том, что я включаю / отключаю кнопку «Сохранить» для действительных / недействительных данных. Теперь в недопустимом состоянии вы не можете нажать кнопку «Сохранить», поэтому текстовое поле не может потерять фокус для обновления (только вкладки, что некрасиво, но в LostFocus больше «непригодностей» (например, ошибка отображается во время ввода и таким образом меняя название).
что было бы идеально, если бы можно было сказать, как отдельные правила валидации применяются к различным событиям, например:
<TextBox Grid.Column="1">
<TextBox.Text>
<Binding Path="Foldername">
<Binding.ValidationRules>
<wpfresources:UniqueChildValidationRule ValidationStep="UpdatedValue" **UpdateSourceTrigger="LostFocus"**>
... stuff here ...
</wpfresources:UniqueChildValidationRule>
<DataErrorValidationRule **UpdateSourceTrigger="PropertyChanged"**/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Каков наилучший способ решить эту проблему?
EDIT
Эта статья MSDN , по-видимому, предполагает, что BindingGroup будет правильным выбором. Я посмотрю на это ...