我有数据网格,我将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;
}
}
答案 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。