显示索引,未触发转换器

时间:2017-09-05 04:55:35

标签: c# wpf xaml

我有数据网格,我将displayindex绑定到数据上下文(这没关系)。我使用一个转换器,它接受一个组合字段名称和tableID的字符串参数,从中我可以提取该列的订单号(来自数据库) 但转换器从未解雇,我认为这是因为后备

这是xaml行:

<DataGridTemplateColumn  Header="Col1" DisplayIndex="{Binding CarID, Converter={StaticResource FieldNameToIndex}, FallbackValue=0, ConverterParameter=Col1-9}">

这是转换器类:

public class FieldNameToIndex : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        string[] data = parameter.ToString().Split('-');
        if(data.Length == 2)
        {
            long val;
            if (!long.TryParse(data[1], out val))
                return 0;

            using (AmethystEntities db = new AmethystEntities())
            {
                string fieldName = data[0];
                Fields mat = db.Fields.Where(m => m.FieldName == fieldName && val == m.TableID).FirstOrDefault();
                if (mat != null)
                    return (mat.DisplayIndex != null ? mat.DisplayIndex : 0);
            }
        }

        return 0;        
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        return value;
    }
}

1 个答案:

答案 0 :(得分:1)

在创建列之后以编程方式创建绑定:

<DataGrid Loaded="DataGrid_Loaded">
    <DataGrid.Columns>
        <DataGridTemplateColumn x:Name="col1" Header="Col1">
        ...
    </DataGrid.Columns>
</DataGrid>
private void DataGrid_Loaded(object sender, RoutedEventArgs e)
{
    BindingOperations.SetBinding(col1, DataGridColumn.DisplayIndexProperty,
        new Binding("CarID") { Source = this, Converter = new FieldNameToIndex(), FallbackValue = 0 });
}

这些列是一个接一个地创建的,当创建第一列时,Columns的{​​{1}}集合中没有其他列,因此DataGrid只能是设为0。