2010-04-04 5 views
1

Disons que j'ai 2 colonnes dans ma grille de données: Colonne A: Sélectionné, et Colonne B: Nom. La colonne Selected est une case à cocher. Et la colonne Nom est un champ de texte. Je souhaite définir la couleur du texte dans la colonne "Nom" en cochant la case Bleu si la colonne A est cochée et en rouge dans le cas contraire.WPF DataGrid lier les données entre les colonnes

Essentiellement, je ne sais pas comment lier des données entre les colonnes de la grille de données. Et un exemple de code/lien fournissant un exemple serait utile.

Répondre

0

Je n'ai pas beaucoup utilisé le WPF Toolkit's DataGrid, mais d'après ce que je peux rassembler, une méthode consiste à utiliser DataGridTemplateColumn, puis à configurer votre DataTriggers en fonction de la liaison.

Voici un exemple qui utilise DataTriggers pour définir le style de la couleur de premier plan ainsi que la couleur d'arrière-plan de la ligne entière. À noter, vous aurez besoin d'une propriété booléenne dans la liaison de ItemsSource pour que cela fonctionne avec cette méthode.

XAML

<Window.Resources> 

<Style TargetType="{x:Type tk:DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding Path=IsSelected}" Value="True"> 
      <Setter Property="Background" Value="Yellow" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

<Style TargetType="{x:Type TextBlock}" x:Key="MyTextBlockStyle"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding Path=IsSelected}" Value="True"> 
      <Setter Property="Foreground" Value="Blue" /> 
     </DataTrigger> 
     <DataTrigger 
      Binding="{Binding Path=IsSelected}" Value="False"> 
      <Setter Property="Foreground" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 


</Window.Resources> 
<Grid> 
<tk:DataGrid x:Name="MyGrid" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding}"> 
    <tk:DataGrid.Columns> 

     <tk:DataGridTemplateColumn Header="Selected" 
            Width="75"> 
      <tk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <CheckBox IsChecked="{Binding Path=IsSelected}"/> 
       </DataTemplate> 
      </tk:DataGridTemplateColumn.CellTemplate> 
     </tk:DataGridTemplateColumn> 

     <tk:DataGridTemplateColumn Header="Name" Width="100" > 
      <tk:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Path=Name}" 
           Style="{StaticResource MyTextBlockStyle}" /> 
       </DataTemplate> 
      </tk:DataGridTemplateColumn.CellTemplate> 
     </tk:DataGridTemplateColumn> 

    </tk:DataGrid.Columns> 
</tk:DataGrid> 

</Grid> 

code Derrière

public partial class DataGridDataTrigger : Window 
{ 
    public List<Person> People { get; set; } 
    public DataGridDataTrigger() 
    { 
     InitializeComponent(); 

     var names = new List<string> { "Joe", "Bob", "Frank", "Scott", "Mike" }; 
     People = new List<Person>(); 
     names.ForEach(x => People.Add(new Person { Name = x })); 

     People.ForEach(x => 
          { 
           if(x.Name.Contains("o")) 
            x.IsSelected = true; 
          }); 

     MyGrid.DataContext = People; 
    } 
} 

public class Person 
{ 
    public string Name { get; set; } 
    public bool IsSelected { get; set; } 
} 
+0

Metro Schtroumpf, merci pour la réponse. Ça marche pour moi. – Markus2k

Questions connexes