by JBrooks
11. March 2013 17:49
I have an application with the following as part of the data model:

So an Account can have many Users and a user can belong to many Accounts. I wanted to show the Accounts in a DataGrid along with the number of Users that were linked to that account like show in the 3rd column here:

The way I did this is to use a converter to count the number of entities in each Account.xrefAccountsUser set. The DataGrid is bound to Accounts and the the XAML for the 3rd column is:
<sdk:DataGridTextColumn Header="Users"
Binding="{Binding xrefAccountsUsers, Converter={StaticResource setToCountConverter}}"
/>
The converter is where we count up the number of entities in the related entity set (xrefAccountsUsers in this case.) I could not find a type that I could cast the value to that had a Count property, so I ended up casting it to IEnumerable and then loop thru the set and I do a count manually. There should never be very many accounts so performance isn’t an issue.
public class SetToCountConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
int cnt = 0;
IEnumerable set = value as IEnumerable;
if (set == null)
return "0";
foreach (var item in set)
cnt++;
return cnt.ToString();
}
public object ConvertBack(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}