web-dev-qa-db-fra.com

Comment supprimer la ligne vide de DataGrid lors de la liaison à un ObservableCollection <T>?

Je deviens fou ici avec ceci:

ObservableCollection<Employee> list = new ObservableCollection<Employee>();
dgEmployees.ItemsSource = list;

Lorsque vous déboguez la variable de liste, elle est vide (list.Count = 0), mais ensuite je la lie à un DataGrid (WPFToolkit), elle me montre une ligne vide.

Dans la fenêtre immédiate, pour dgEmployees.Items, il montre:

dgEmployees.Items[0]
{NewItemPlaceholder}

et

dgEmployees.Items[0].GetType()
{Name = "NamedObject" FullName = "MS.Internal.NamedObject"}
[System.RuntimeType]: {Name = "NamedObject" FullName = "MS.Internal.NamedObject"}

Cela semble se produire après avoir mis ce Datagrid dans un TabControl, mais je ne suis pas sûr que cela ait quelque chose à voir avec cela.

Quelqu'un sait-il comment supprimer cette ligne vide?

41
Junior M

J'ai compris

sur Datagrid XAML, mettez l'attribut:

IsReadOnly="True"
20
Junior M

Le même problème persiste dans la version WPF 4.0 de DataGrid, et il est provoqué par la nouvelle ligne qu'il affiche automatiquement pour ObservableCollection ItemsSource. Définir IsReadOnly sur True, c'est trop radical à mon humble avis.
Je l'ai résolu en désactivant la propriété CanUserAddRows si vous n'avez pas besoin de ce comportement, mais vous voulez quand même que les cellules soient modifiées:

CanUserAddRows = "False"

90
Pablonete

CanUserAddRows="False" et IsReadOnly="True" la combinaison des deux est préférable pour éviter tout inconvénient supplémentaire.

3
Sawarkar vikas