2017-08-23 4 views
0

Y at-il un moyen d'attacher un convertisseur à chaque cellule dans un GridView pour permettre de changer la couleur selon le contenu du texte?Utiliser le convertisseur pour les cellules dans DataGrid avec AutoGenerateColumns

Échantillon de données avec couleur. Comment ça devrait ressembler.

Datagrid sample with color

XAML

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

code Derrière

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

Ce que je l'ai fait jusqu'à présent utilise le style et la fixation du convertisseur. Mais dans le style, je n'ai pas accès aux données. Et dans les données, au cas où il est généré automatiquement, je n'ai aucune incluence à la couleur de fond de la cellule.

+0

chèque [ce Q + A] (https://stackoverflow.com/questions/45701332). créer un convertisseur, créer un style DataGridCell qui change de couleur en fonction de la valeur à l'aide du convertisseur, affecter ce style à la propriété DataGrid.CellStyle – ASh

Répondre

0

Vous pouvez faire cela en liant à la propriété Content.Text.

convertisseur d'échantillon:

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

échantillon 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>