Partage
  • Partager sur Facebook
  • Partager sur Twitter

Binding Trigger DataGrid C# WPF

Sujet résolu
    15 novembre 2017 à 15:55:36

    Bonjour, 

    Je cherche à changer la couleur d'une ligne de mon DataGrid en fonction du contenu d'une cellule de cette ligne. J'ai trouver comment faire en code-behind et j'aimerais le faire en XAML. Le code behind (fonctionnel) :

    var st = new Style();
    var RedSetter = new Setter(BackgroundProperty, Brushes.Red);
    var dt = new DataTrigger() { Value = "Clos", Binding = new Binding("Statut") };
    dt.Setters.Add(RedSetter);
    st.TargetType = typeof(DataGridRow);
    st.Triggers.Add(dt);
    dtgd.RowStyle = st;

    Dans le trigger ci-dessus, si la case de la colonne "Statut" est égale au texte "Clos", alors la ligne devient rouge. Je voudrais faire le même type de trigger en XAML, j'ai essayé et j'ai ça:

            <DataGrid Name="dtgd" AutoGenerateColumns="False" ItemsSource="{Binding}" FontSize="13">
                <DataGrid.CellStyle>
                    <Style TargetType="DataGridRow">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Path=Statut}" Value="Clos">
                                <Setter Property="Background" Value="LightGray"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGrid.CellStyle>
                <DataGrid.Columns>               
                    <DataGridTextColumn Header="Statut" Binding="{Binding Path=Statut}">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="HorizontalAlignment" Value="Center" />
                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>

    J'ai fait différents tests au niveaux du trigger et le problème se situe à ce niveau là, sans le trigger le reste fonctionne bien.

    Le problème est... et bien je ne sais pas o_O Visual Studio m'affiche un message disant: "Votre application est à l'état d'arrêt, mais aucun code ne peut être affiché, car l'ensemble des threads exécutaient du code externe (en règle générale, il s'agit de code système ou de code d'infrastructure)."

    Je pense que le problème vient du Binding de mon Trigger (je n'ai pas bien compris à quoi je devais Bind, ma colonne du tableau ou sa source, et surtout je n'ai pas compris quels mots clés utilisés pour faire ce Bind!)

    EDIT:

    Problème résolu, je modifiais le style des cellules et pas de la ligne, modifier DataGrid.CellStyle par DataGrid.RowStyle suffit à ce que tout fonctionne 

    -
    Edité par Voliarssa 15 novembre 2017 à 16:04:03

    • Partager sur Facebook
    • Partager sur Twitter

    Binding Trigger DataGrid C# WPF

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown