C# 将Datagrid Columnheader后台绑定到da datatable行
我想根据绑定到DataGrid的datatable中的行为DataGrid ColumnHeader着色。 但是我该怎么做呢?我在Datagrid.Row上使用的方法不起作用,因为显然没有我可以使用的“Column”属性 我想到了这个,所以我可以在我的Colorconverter中使用整个DataGrid,但是我无法找到一种方法来确定当前呈现的是哪个Columnheader XAML:C# 将Datagrid Columnheader后台绑定到da datatable行,c#,wpf,binding,datagrid,C#,Wpf,Binding,Datagrid,我想根据绑定到DataGrid的datatable中的行为DataGrid ColumnHeader着色。 但是我该怎么做呢?我在Datagrid.Row上使用的方法不起作用,因为显然没有我可以使用的“Column”属性 我想到了这个,所以我可以在我的Colorconverter中使用整个DataGrid,但是我无法找到一种方法来确定当前呈现的是哪个Columnheader XAML: 颜色转换器背后的代码: public object Convert(object value, Type
颜色转换器背后的代码:
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var col = (System.Data.DataColumn)value;
var colStateObj = col.Table.Rows[col.Table.Rows.Count-1][col.ColumnName];
Enums.RowState colorValue = (Enums.RowState)Enum.Parse(typeof(Enums.RowState), colStateObj.ToString());
switch (colorValue)
{
case Enums.RowState.HeaderRow:
return Brushes.Gainsboro;
case Enums.RowState.isIncluded:
return Brushes.LightGreen;
case Enums.RowState.NotIncluded:
return Brushes.LightSalmon;
default:
return Brushes.Azure;
}
}
/// <summary>
/// Converts the value of the hidden Color row to a color on the Data table.
/// </summary>
/// <param name="value">The value</param>
/// <param name="targetType">The type of the binding target.</param>
/// <param name="parameter">The converter parameter.</param>
/// <param name="culture">The culture</param>
/// <returns>
/// EThe converted value or NULL
/// </returns>
/// <exception cref="System.NotImplementedException">Not implemented because it is not needed</exception>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
var col=(System.Data.DataColumn)值;
var colStateObj=col.Table.Rows[col.Table.Rows.Count-1][col.ColumnName];
Enums.RowState colorValue=(Enums.RowState)Enum.Parse(typeof(Enums.RowState),colStateObj.ToString());
开关(颜色值)
{
案例Enums.RowState.HeaderRow:
盖恩斯博罗;
案例Enums.RowState.i包括:
返回笔刷。浅绿色;
案例Enums.RowState.notinclude:
返回刷。轻鲑鱼;
违约:
返回笔刷。Azure;
}
}
///
///将隐藏颜色行的值转换为数据表上的颜色。
///
///价值
///绑定目标的类型。
///转换器参数。
///文化
///
///E转换后的值或空值
///
///未实现,因为不需要它
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
抛出新的NotImplementedException();
}
我终于找到了一个解决方案,使用多重绑定: XAML:
要确定当前列标题-您是否尝试过在转换器中检查当前DataColumn的ColumnName?@SandraWalters:谢谢您的想法:我已经尝试过了,但CurrentColumn为空:(
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var col = (System.Data.DataColumn)value;
var colStateObj = col.Table.Rows[col.Table.Rows.Count-1][col.ColumnName];
Enums.RowState colorValue = (Enums.RowState)Enum.Parse(typeof(Enums.RowState), colStateObj.ToString());
switch (colorValue)
{
case Enums.RowState.HeaderRow:
return Brushes.Gainsboro;
case Enums.RowState.isIncluded:
return Brushes.LightGreen;
case Enums.RowState.NotIncluded:
return Brushes.LightSalmon;
default:
return Brushes.Azure;
}
}
/// <summary>
/// Converts the value of the hidden Color row to a color on the Data table.
/// </summary>
/// <param name="value">The value</param>
/// <param name="targetType">The type of the binding target.</param>
/// <param name="parameter">The converter parameter.</param>
/// <param name="culture">The culture</param>
/// <returns>
/// EThe converted value or NULL
/// </returns>
/// <exception cref="System.NotImplementedException">Not implemented because it is not needed</exception>
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
<Style TargetType="DataGridColumnHeader">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource ExcelColumnColorConverter}">
<Binding RelativeSource="{RelativeSource AncestorType=DataGrid}"></Binding>
<Binding RelativeSource="{RelativeSource self}" Path="Column"></Binding>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
public class ExcelColumnColorConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value[1] == null))
{
var dgrid = (DataGrid)value[0];
var colHeader = ((DataGridTextColumn)value[1]).Header.ToString();
var dView = (System.Data.DataView)dgrid.ItemsSource;
var table = dView.Table;
var rowstateObj = table.Rows[table.Rows.Count - 1][colHeader];
Enums.RowState colorValue = (Enums.RowState)Enum.Parse(typeof(Enums.RowState), rowstateObj.ToString());
switch (colorValue)
{
case Enums.RowState.HeaderRow:
return Brushes.Gainsboro;
case Enums.RowState.isIncluded:
return Brushes.LightGreen;
case Enums.RowState.NotIncluded:
return Brushes.LightSalmon;
default:
return Brushes.Azure;
}
}
else
{
return null;
}
}