2009-10-16 5 views
2

Le problème est que la ligne vide dans le DataGrid n'apparaît pas, ergo utilisateur ne peut pas ajouter de données. Voici le code:WPF DataGrid - ligne pour nouvelle entrée non visible

System.Collections.ObjectModel.ObservableCollection<CoreVocabularyEntry> dataList = new System.Collections.ObjectModel.ObservableCollection<CoreVocabularyEntry>(); 
    public VocabularyToolWindow() 
    { 
     InitializeComponent(); 
     dataList.Add(new CoreVocabularyEntry { Foreign = "ja", Native = "ano" }); 
     ListCollectionView view = new ListCollectionView(dataList); 
     WordsDataGrid.ItemsSource = dataList; 
     WordsDataGrid.CanUserAddRows = true; 
     MessageBox.Show(view.CanAddNew.ToString()); 
    } 

Je ne peux pas comprendre pourquoi view.CanAddNew est false. Cela ressemble à un joli scénario, donc il y a probablement quelque chose qui me manque. Quelqu'un peut-il me dire ce qui ne va pas avec le code? CoreVocabularyEntry est juste ce qui suit:

public struct CoreVocabularyEntry : IVocabularyEntry 
{ 
    #region IVocabularyEntry Members 

    public string Foreign 
    { 
     get; 
     set; 
    } 

    public string Native 
    { 
     get; 
     set; 
    } 

    #endregion 
} 

Thx, J.K.

Répondre

1

Déplacez WordsDataGrid.CanUserAddRows = true; au-dessus de l'instruction où vous définissez ItemSource du DataGrid.

EDIT:

remarqué que vous avez juste pas mis en œuvre IEditableObject. Vous devrez le faire pour utiliser les fonctionnalités d'édition de DataGrid.

+0

Essayé, ne fonctionne pas :-(. Je pense que le problème est la collection plutôt que dans le DataGrid lui-même. (J'essaie la liste avec le même résultat –

+0

Oups, résolu le mauvais bug! .CanAddNew avant de le définir comme itemsource Quelque chose à propos de l'accès avant de l'associer à un DataGrid a corrigé ce problème pour moi – gn22

+0

Vous pouvez simplement utiliser une variable dummy comme (bool dummy = view.CanAddNew) – gn22

0

Cela peut être plus simple que ci-dessus. J'ai eu ce problème quand je n'ai pas eu un constructeur par défaut et par conséquent le DataGrid n'a pas su comment ajouter la nouvelle rangée. Mon seul constructeur a impliqué un tas d'informations à fournir. Aller à l'objet de que la liste <> est faite à partir de et ajouter un constructeur comme: public MyClass() {} { Espérons que cela aide!

Questions connexes