In case anyone finds this post and wonders about a solution:
I ended up creating a converter class (implement IValueConverter). The Convert method received an IList as a value (that is what I had attached as the Binding Path). Using LINQ, I distilled the elements, column wise, into IEnumerables.
IEnumerable<string> firstNames = (from person in list select person.FirstName).Distinct();
where list is an IList of Person elements
if firstNames.Count() == 1, I had a single value, otherwise multiple. then I set the element value accordingly and returned it as the Convert method's value. The IList passed in here was saved as an attribute of the converter instance.
the ConvertBack method used the saved IList to propagate any edited values back to the original.