принудительная проверка; WPF, DataGrid, ObservableCollection

У меня есть WPF DataGrid. Я читаю CSV-файл и создаю ObservableCollection объектов. Я установил DataGrid.ItemsSource в коллекцию. Затем я хотел бы принудительно выполнить RowValidation для каждой строки в DataGrid. Если я, как пользователь, редактирую ячейку, срабатывает RowValidation, все в порядке. Но проверка не срабатывает при начальной загрузке. Есть ли способ вызвать ?? ValidateRow ?? подряд? в каждом ряду? (C #, WPF, VS2008 и т. Д.)


person Community    schedule 16.06.2009    source источник
comment
Вы можете попробовать row.BindingGroup.ValidateWithoutUpdate() stackoverflow.com/a/42476772/2122718   -  person marbel82    schedule 16.09.2020


Ответы (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