Я пытаюсь проверить ввод данных на DataGrid
, который заполнен DataView
(например, myDataGrid.ItemsSource = myDataView
). Тем не менее, все примеры проверки WPF DataGrid, которые я видел, предполагают, что источником DataGrid
является класс C#. Я не могу понять, как подключить одну ячейку (т. Е. Столбец) к проверке кода. Может ли кто-нибудь привести пример или указать мне его?Проверка WPF DataGrid при привязке к DataView
ответ
Итак, я сделал еще несколько исследований, и в основном я отсутствовал что я могу указать имя столбца с атрибутом Path
Binding
(или даже использовать порядковый номер столбца в скобках, , напримерPath="[0]"
). После этой реализации все в основном совпадает с использованием свойства класса. Поэтому типичное определение столбца DataGrid
, которое я использую, следующее:
<DataGridTextColumn Header="Regular" EditingElementStyle="{StaticResource ValidationErrorStyleBoxRA}" ElementStyle="{StaticResource ValidationErrorStyleBlockRA}" Width="60">
<DataGridTextColumn.Binding>
<Binding Path="HourlyRate" StringFormat="F3" ValidatesOnExceptions="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:HourlyRatesAmountValidate ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
Хорошо, я сделал несколько быстрых тестов; Я думаю, что основным препятствием на самом деле делать это вручную является то, что DataGridCell не создает привязки для своего содержимого при непосредственном назначении DataView для отображения. Однако, если вы захотите перепрыгнуть через обручи при назначении пользовательских DataGridTemplateColumn
s при создании DataGrid, вы можете получить доступ к связям, например, в экземплярах TextBox внутри шаблона, и установить на них специальные ошибки проверки.
На самом деле, это или переопределяет стиль по умолчанию для текстовых полей, сгенерированных DataGrid; вы видите, стиль текстового поля по умолчанию не имеет границ или чего-то еще, поэтому установка ошибки проверки на него не имеет никакого эффекта. Внедрение его в обычное текстовое поле с помощью DataTemplate или переопределение его стиля позволило бы фактически сделать что-то видимым как эффект установки ошибки проверки.
Однако вам нужно провести исследование самостоятельно; Я сделал быстрый прототип, и он работает, но я не могу правильно создать привязку в DataTemplate (либо я забыл все WPF, которые я знал с тех пор, как работал с ним последним, или я знаю только, как работать с соответствующими привязками :)) , Если вы куда-то с этим справитесь, то это будет проще:
Как-нибудь получите доступ к BindingExpression; я сделал привязку обработчика к событию LostFocus и проверил, был ли потерянный фокус текстовым полем, который находился внутри DataGridCell; если да, то я просто отметить, что связывание как недействительный (с t
представляющий собой экземпляр TextBox):
var x = t.GetBindingExpression(TextBox.TextProperty);
Validation.MarkInvalid(x, new ValidationError(new ExceptionValidationRule(), x.ParentBinding, "error", new Exception("error")));
Я должен признаться, я не уверен больше, что роль каждого аргумента в конструкторе ValidationError (я думаю, что исключение сообщение отображается по умолчанию во всплывающей подсказке проверки? Или это содержимое ошибки?), но я уверен, что вы можете понять это. Теперь, если вы не возражаете, я думаю, что я сделаю перерыв ... как я сказал, это непросто идти против потока.
- 1. WPF datagrid rowheader при привязке к dataview
- 2. Проверка данных DataGrid при привязке непосредственно к DataTable - C#/WPF
- 3. Как удалить ListViewItem при привязке к DataView
- 4. WPF Datagrid DataBinding DataView
- 5. Переполнение стека при привязке DataGrid WPF
- 6. WPF Autogenerated DataGrid Cell изменил событие при привязке к ItemSource
- 7. Столбец в DataView не отображается при привязке данных к DataGrid (или RadGrid)
- 8. DataGrid edition 'EditItem' не разрешен для этого представления` при привязке к WPF DataGrid
- 9. WPF ComboBox SelectedItem при привязке к перечислению
- 10. WPF Управление привязкой к DataView
- 11. Wpf Datagrid не показывает один столбец при привязке
- 12. WPF привязка к DataGrid
- 13. Asp.net привязка большого dataview к DataGrid
- 14. WPF ToolKit DataGrid Performance
- 15. Проверка правильности столбца DataGrid (WPF)
- 16. C# wpf привязка к привязке
- 17. Проблема при привязке DataGridComboBoxColumn в Datagrid
- 18. Проверка нокаута при привязке hasfocus
- 19. WPF DataGrid и многопоточность
- 20. Загрузка DataView в DataGrid приводит к зависанию ShowDialog?
- 21. WPF C# Сложность с использованием Dataview и DataGrid
- 22. NullReferenceException при привязке свойства к кнопке в Xceed Datagrid
- 23. Как отключить ячейку в DataGrid при привязке к ObservableCollection
- 24. Почему WPTPoolkit DataGrid так медленно при привязке?
- 25. Как получить wpf toolkit datagrid для отображения новых строк при привязке к набору данных
- 26. WPF - Изменение имени столбца в привязке данных DataGrid
- 27. JS скрывает div при привязке к привязке
- 28. привязка DataGrid, не работающая с DataView
- 29. Анимировать текст WPF при привязке обновлений, как?
- 30. WPF DataGrid привязка к datatable
Примеры, которые вы видели, вероятно, лучший путь вперед; вы уверены, что не хотите идти этим путем? WPF в целом полностью ориентирован на этот стиль, и идти против него обычно сложнее. –
Я сомневаюсь, что тривиальным является назначение DataView в качестве источника данных для DataGrid, однако в этом сценарии действительно сложно выполнить проверку. – Conrad