Conditionnellement faire readonly WPF DataGridCell
J'ai une situation qui doit conditionnellement faire readonly wpf datagrid de la cellule. Il est IsReadOnly propriété dans DataGridCell. Mais malheureusement, cette propriété est en lecture seule! Est-il possible de le faire?
ant.
le IsReadOnly est un résultat booléen de vérifier que la météo de la cellule est en lecture seule ou Pas, c'est pourquoi il est une propriété en lecture seule 🙂
IsReadOnly propriété est en lecture/écriture sur DataGrid qui est l'élément racine de la grille de données. IsReadOnly propriété n'est pas réglable dans les sous-éléments de la grille de données telles que DataGridCell parce qu'il ne fait pas de sens pour définir DataGridCell.IsReadOnly true lors de la DataGrid.IsReadyOnly est faux
La raison principale pour laquelle vous ne pouvez pas définir de IsReadOnly sur un DataGridCell est parce qu'ils sont transitoires. Ils sont créés et jetés comme nécessaire parce que la grille de données permet de ne pas garder l'ensemble de ses lignes et les cellules dans la mémoire à n'importe quel point dans le temps. Donc, il n'y a pas de place pour vous à même de définir cette propriété, même si elle était en écriture.
stackoverflow.com/questions/2030143/...
IsReadOnly propriété est en lecture/écriture sur DataGrid qui est l'élément racine de la grille de données. IsReadOnly propriété n'est pas réglable dans les sous-éléments de la grille de données telles que DataGridCell parce qu'il ne fait pas de sens pour définir DataGridCell.IsReadOnly true lors de la DataGrid.IsReadyOnly est faux
La raison principale pour laquelle vous ne pouvez pas définir de IsReadOnly sur un DataGridCell est parce qu'ils sont transitoires. Ils sont créés et jetés comme nécessaire parce que la grille de données permet de ne pas garder l'ensemble de ses lignes et les cellules dans la mémoire à n'importe quel point dans le temps. Donc, il n'y a pas de place pour vous à même de définir cette propriété, même si elle était en écriture.
stackoverflow.com/questions/2030143/...
OriginalL'auteur Ant | 2010-06-01
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure d'utiliser le DataGrid.BeginningEdit événement conditionnelle, vérifier si la cellule est modifiable, puis définir la propriété Annuler l'événement args si ce n'.
OriginalL'auteur Josh
La solution similaire comme Goblin ci-dessus, mais avec un peu de code des échantillons:
L'idée est de passer dynamiquement la
CellEditingTemplate
entre les deux modèles, l'un est le même que celui de laCellTemplate
, l'autre est pour l'édition. Cela rend le mode d'édition des actes exactement la même que la non-modification de la cellule, mais c'est en mode édition.Ce qui suit est un exemple de code pour faire cela, notez que cette approche nécessite
DataGridTemplateColumn
:D'abord, de définir deux modèles pour la lecture seule et modification des cellules:
Puis de définir un modèle de données avec d'autres
ContentPresenter
calque et utilisezTrigger
pour passer leContentTemplate
de laContentPresenter
, de sorte que les deux modèles peuvent être commutés de façon dynamique par leIsEditable
de liaison:HTH
OriginalL'auteur Recle
Une autre solution très simple à ce problème est d'utiliser un Style de la DataGridCell
Ce style suppose qu'il existe une propriété IsEnabled dans le ViewModel.
Cela ne fait pas de la cellule en lecture seule, mais désactivé. C'est presque la même chose sauf que ca ne peut pas être sélectionné. Cette solution pourrait ne pas être applicable dans tous les cas, à cause de cela.
Il travaille pour moi...
Pas de travail pour les cellules individuelles.
OriginalL'auteur Henrik
Vous pouvez également utiliser la TemplateSelector de propriété pour définir deux DataTemplates (une écriture et une lecture seule) en fonction de votre logique? Il suffit de créer une classe qui hérite de DataTemplateSelector et remplacer le SelectTemplate (), méthode (ici vous avez accès à la datacontext).
OriginalL'auteur Goblin