I am attempting to validate input on a DataGrid
which is populated by a DataView
(e.g. myDataGrid.ItemsSource = myDataView
). However, all the WPF DataGrid validation examples I have seen assume that the DataGrid
source is a C# class. I can't figure out how to hook up a single cell (i.e. a column) to a code-behind validation. Can someone give an example or point me to one?
So I did some more research, and what I was basically missing was that I can specify the column name with the Path
attribute of a Binding
(or even use the column ordinal in brackets, e.g. Path="[0]"
). After that realization, everything is basically the same as using a class property. So a typical DataGrid
column definition I use follows:
<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>