One thing you can do is force your datagrid to the SelectionUnit as FullRow, Cell or CellOrRowHeader
dim dg = new DataGrid();
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.FullRow;
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.CellOrRowHeader;
dg.SelectionUnit == System.Windows.Controls.DataGridSelectionUnit.Cell;
In XAML, you would just apply the property setting
<DataGrid SelectionUnit="FullRow" ... >
Then you should be able to simply hook into the SelectedCellsChanged or SelectionChanged method to act on it...
Then you don't have to worry about a partial row selection of just a cell or two and not trigger an entire row you are expecting to process. By forcing a full row, it will have in its collection one entry per row. Otherwise, if you have it by cell and have 5 columns wide and person selects 3 cells on two rows, it will have 6 cells representing the same row for each individual cell covering the rows..