У меня есть WPF DataGrid. Я читаю CSV-файл и создаю ObservableCollection объектов. Я установил DataGrid.ItemsSource в коллекцию. Затем я хотел бы принудительно выполнить RowValidation для каждой строки в DataGrid. Если я, как пользователь, редактирую ячейку, срабатывает RowValidation, все в порядке. Но проверка не срабатывает при начальной загрузке. Есть ли способ вызвать ?? ValidateRow ?? подряд? в каждом ряду? (C #, WPF, VS2008 и т. Д.)
принудительная проверка; WPF, DataGrid, ObservableCollection
Ответы (2)
Для ваших привязок установите UpdateSourceTrigger на свойство изменено, а затем поместите в него свои правила проверки. Триггер источника обновления по умолчанию - "Потерянный фокус".
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
Кроме того, для другого хорошего решения посмотрите здесь
http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
Пол создает собственный провайдер ошибок, например
Вы можете вызвать метод Validate () на ErrorProvider, чтобы принудительно выполнить проверку, и проверить, действительны ли элементы управления.
person
amazedsaint
schedule
16.06.2009
Вам нужно будет настроить RowValidationRule и установить ValidationStep = "ConvertedProposedValue", если вы хотите, чтобы он проверялся после начальной загрузки ObservableCollection.
<DataGrid Name="dgCsvObjects"
ItemsSource="{Binding Path=CsvObjects}"
AutoGenerateColumns="False">
<DataGrid.RowValidationRules>
<Validation:MyObjectValidationRule ValidationStep="ConvertedProposedValue" />
</DataGrid.RowValidationRules>
<DataGrid.Columns>
<DataGridTextColumn Header="Property1" Binding="{Binding Path=Property1}" />
<DataGridTextColumn Header="Property2" Binding="{Binding Path=Property2}" />
<DataGridTextColumn Header="Property3" Binding="{Binding Path=Property3}" />
<DataGridTextColumn Header="Property4" Binding="{Binding Path=Property4}" />
</DataGrid.Columns>
</DataGrid>
person
Khan
schedule
16.12.2011
row.BindingGroup.ValidateWithoutUpdate()stackoverflow.com/a/42476772/2122718 - person marbel82   schedule 16.09.2020