Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Datagrid Columnheader后台绑定到da datatable行_C#_Wpf_Binding_Datagrid - Fatal编程技术网

C# 将Datagrid Columnheader后台绑定到da datatable行

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

我想根据绑定到DataGrid的datatable中的行为DataGrid ColumnHeader着色。 但是我该怎么做呢?我在Datagrid.Row上使用的方法不起作用,因为显然没有我可以使用的“Column”属性

我想到了这个,所以我可以在我的Colorconverter中使用整个DataGrid,但是我无法找到一种方法来确定当前呈现的是哪个Columnheader

XAML:


颜色转换器背后的代码:

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;
            }

        }