If you are using a true virtual grid, then normally, you would try to avoid code like:
grid.Model[row, col].Background = Brushes.Crimson;
The reason is that in a virtual grid, there is no storage automatically allocated to store cell specific properties.
In general, for a virtual grid, you would have to provide the Crimson brush in QueryCellInfo. In the mousedown event, you would just want to make sure QueryCellInfo is hit. Attached is a little sample that does this.
WpfApplication13_bbc314bb.zip