我有一个silverlight数据网格,并以编程方式动态添加列。
其中一列绑定到一个复杂属性,该属性是业务对象列表。 为了在列表中的右侧对象上显示正确的属性,我正在使用自定义值转换器,将List和对象的名称作为可选参数传递。
然后我在列表中旋转,并在列表中找到正确的对象以绑定到其value属性。
这非常适用于显示目的,但它似乎禁用或混淆禁止对列进行排序。
我知道它必须专门用于转换器,因为我添加的任何其他动态列,使用标准属性绑定,它排序很好。
以下是我的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);