Question

J'ai un DataGrid dynamique dans lequel l'une des colonnes est un CheckBox.J'ai créé une classe "Transactions" dans laquelle je lie les colonnes de la grille de données à différentes propriétés de cette classe.Je veux que ma case à cocher soit liée à une propriété qui est un entier.C'est un entier car je remplis les propriétés d'une requête sur ma base de données.Les entiers possibles sont 1 (vrai) ou 0 (faux).Voici ce que j'ai jusqu'à présent pour créer ma base de données:

    private DataGridTemplateColumn GetVoidColumn()
    {
        DataGridTemplateColumn voidColumn = new DataGridTemplateColumn();
        voidColumn.Header = "Void";

        Binding bind = new Binding("Visible");
        bind.Mode = BindingMode.TwoWay;

        // Create the CheckBox
        FrameworkElementFactory voidFactory = new FrameworkElementFactory(typeof(CheckBox));
        voidFactory.SetValue(CheckBox.IsCheckedProperty, bind);
        DataTemplate voidTemplate = new DataTemplate();
        voidTemplate.VisualTree = voidFactory;

        voidColumn.CellTemplate = voidTemplate;

        return voidColumn;
    }

Sur ma Datagrid réelle, la case à cocher apparaît mais elle est toujours décochée, même si la propriété affiche un 1. Même lorsque je fais ma validation de ligne, la valeur qui apparaît pour la colonne est correcte, contient un 1 ouun 0 dans le ItemArray de la ligne.C'est juste que la case à cocher n'est pas cochée dans l'interface utilisateur pour une raison quelconque.Quelqu'un peut-il m'aider?

Était-ce utile?

La solution

Vous pouvez utiliser Converters pour convertir les valeurs de propriété 0 et 1 en false et true.La propriété IsChecked ne comprend probablement pas les valeurs 0 et 1. Créez une classe qui implémente IValueConverter et appliquez ce convertisseur pour convertir int en bool.

Une autre option pourrait être de créer une propriété pour cela dans votre classe

public bool IsChecked
{
   get
   {
       if(IntProperty == 0)
          return false;
       return true;
   }
   set
   {
       if(value)
          IntProperty = 1;
       else 
          IntProperty = 0;
   }
}

maintenant au lieu de la liaison avec la propriété int, la liaison avec la propriété ci-dessus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top