2017-08-23 120 views
0

有没有方法将转换器附加到GridView中的每个单元格以允许根据文本内容更改颜色?使用Converter for DataGrid中的单元格与AutoGenerateColumns

Datagrid带颜色的样本。它应该是什么样子。

Datagrid sample with color

XAML

[![<DataGrid x:Name="dgvData" AutoGenerateColumns="True" />][1]][1] 

代码隐藏

Dim tableView As DataView = New DataView(DataTable) 
    Me.dgvData.ItemsSource = tableView 

我所做的迄今使用的样式和连接的转换器。 但是在风格上,我无法访问数据。在数据中,如果它是自动生成的,我没有包含单元格背景颜色。

+0

检查[此Q + A](https://stackoverflow.com/questions/45701332)。创建一个转换器,创建一个DataGridCell样式,使用转换器根据值更改颜色,将该样式分配给DataGrid.CellStyle属性 – ASh

回答

0

您可以通过绑定到Content.Text属性来做到这一点。

样品转换器:

public class MyConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var x = value; 
     return x.ToString() == "1" ? Brushes.Red : Brushes.Green; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

样品XAML:

<Window.Resources> 
     <local:MyConverter x:Key="Conv"/> 
    </Window.Resources> 
    <StackPanel> 
     <DataGrid x:Name="dgvData" AutoGenerateColumns="True"> 
      <DataGrid.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Setter Property="Background" Value="{Binding Content.Text,RelativeSource={RelativeSource Self}, Converter={StaticResource Conv}, Mode=OneWay}"/> 
       </Style> 
      </DataGrid.CellStyle>    
     </DataGrid> 
    </StackPanel> 
</Window>