2011-06-25 5 views
0

Je code suivant dans un DataGrid étendu pour cocher ou décocher la CheckBoxColumn:Comment lier des données dans WPG DataGrid dans le code?

  if (this.Columns[c] is DataGridCheckBoxColumn) 
      { 
       CheckBox cb = this.GetCellCtrl<CheckBox>(this.Columns[fromCol], topRow); 
       for (int r = fromRow + 1; r <= toRow; r++) 
       { 
        CheckBox tt = this.GetCellCtrl<CheckBox>(this.Columns[fromCol], this.GetRow(r)); 
        if (tt != null) 
         tt.IsChecked = cb.IsChecked; 
       } 
      } 

Le problème est que les cases sont cochées (ou non), mais les données sous-jacentes ne sont pas mis à jour. Si je clique sur la case à cocher, cela fonctionne. Alors, quelle est la différence entre mon code et le clic de la souris? Comment résoudre mon problème?

Répondre

1

La définition d'une valeur localement supprimera la liaison qui associe votre CheckBox à vos données. Y a-t-il une raison pour laquelle vous mettez à jour l'état de vos données via l'interface utilisateur? Pourquoi ne pas utiliser votre même logique de boucle sur les données?

Si vous devez vraiment le faire de cette façon, vous devriez regarder dans UI Automation:

http://msdn.microsoft.com/en-us/library/ms747327.aspx

+0

Merci beaucoup pour votre réponse. Je ne cherche pas UI Automation. J'essaie simplement de créer une fonction générique pour rendre les cellules sélectionnées vérifiables indépendamment de la source de données sous-jacente - s'il s'agit d'un DataGridCheckBoxColum, les données de liaison doivent être de type booléen. J'essaie pratiquement de simuler un clic de souris sur les CheckBox. De mes tests, la liaison ne semble pas être découplée, car je pouvais toujours cliquer dessus et les données sous-jacentes reflétaient le changement. – newman

+0

Vous avez dit "Définir une valeur localement va supprimer la liaison" - Comment cela fonctionne? Comment puis-je rétablir la liaison? – newman

Questions connexes