I sort of have it working now, but not sure exactly why.
If I put OutFields="*" in the XAML, I get the column headings and correct behavior (selection highlights the parcels, I can step through the features) but no attributes in the rows.
If I put query.OutFields.AddRange(New String() {"*"}) in the code, but don't but OutFields="*" in XAML, I get nothing in the datagrid except it indicates the correct number of selected features.
If I have both OutFields="*" in XAML and query.OutFields.AddRange(New String() {"*"}) in code, I get all the fields, column headers and correct behavior.
So, basically it works, just not sure why.