dirty field

Nov 29, 2008 at 7:22 AM
I'm binding to an ObservableCollection and need a way to know that a cell/row has changed.

My first thought was to use some sort of validation rules.

A previous poster had posted an example where the follow code was used to do row level validation:

                <dg:DataGrid.RowValidationRules>
                    <dc:RowDummyValidation ValidationStep="UpdatedValue" />
                </dg:DataGrid.RowValidationRules>

This might work, but I don't know what RowDummyValidation is or how to make it.

Thanks,

Bill


Nov 29, 2008 at 7:33 AM
sorry, the xaml code was actually this:

                <dg:DataGrid.RowValidationRules>
                    <local:RowDummyValidation ValidationStep="UpdatedValue" />
                </dg:DataGrid.RowValidationRules>

and in the code behind:

        private override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            return ValidationResult.ValidResult;
        }


Nov 29, 2008 at 8:41 PM
Hi,

The best way to determine when a row has changed is to detect when the DataGrid commits the change. If your objects implement IEditableObject you can raise an event when the EndEdit methods is invoked by the DataGrid. See this article for details:

http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx

Especially the part about layered architectures:

http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx#layered

Regards,
Colin E.


Nov 30, 2008 at 3:07 AM
Hey Colin,

Thanks for getting back. I 've been using your fine article since the very beginning with DataGrid, but in this case, I seem to not be finding what I'm looking for. But I think you gave me an idea ...

The collection bound to the DataGrid implements ObservableCollection which (I think) means it must implement INotifyPropertyChanged.  So each field has a PropertyChangedEventHandler event which I think I can look at. 

Thanks,

Bill