У меня есть сетка данных silverlight, и я динамически добавляю столбцы в нее программно.
Один из столбцов связан со сложным свойством, которое представляет собой список бизнес-объектов.
Чтобы отобразить правильное свойство для нужного объекта в списке, я использую пользовательский преобразователь значений, передавая List и имя объекта в качестве необязательного параметра.
Затем я прокручиваю список и нахожу нужный объект в списке, чтобы связать его со свойством значения.
Это отлично работает для отображения, но, похоже, отключает или портит, запрещает сортировку столбца.
Я знаю, что это связано конкретно с конвертером, потому что любой другой динамический столбец, который я добавляю, со стандартным связыванием свойств, сортируется нормально.
Вот код моего IValueConverter:
public class MetaDataValueConverter : IValueConverter
{
public MetaDataValueConverter()
{
}
public virtual object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string result = string.Empty;
List<XFerMetadata> md = (List<XFerMetadata>)value;
foreach(XFerMetadata val in md)
{
if (val.Name.Match(parameter.ToString()))
{
result = val.Value;
break;
}
}
return result;
}
public virtual object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
А вот код, в котором я динамически создаю столбец и устанавливаю привязку.
DataGridTextColumn col = new DataGridTextColumn();
col.Header = schema.FieldName;
Binding binding = new Binding("MetaData");
binding.Converter = new MetaDataValueConverter();
binding.ConverterParameter = schema.FieldName;
col.Binding = binding;
cols.Add(col);