我有数据网格,我将 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;
}
}
创建列后,以编程方式创建绑定:
<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
集合中没有其他列DataGrid
,因此DisplayIndex
只能设置为 0。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句