Laden...

Leeres DataGrid Element hinzufügen

Erstellt von Robin0 vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.481 Views
R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 9 Jahren
Leeres DataGrid Element hinzufügen

Hallo,

Ich habe eine klasse an ein datagrid gebunden, die Klasse implementiert:
IEnumerable, IEnumerable<Test>, IList<Test>, INotifyCollectionChanged, IList.
Die zugrundeligende Liste mit der ich arbeite "ObservableCollection<Test> Items";

Ich kann problemlos Items entfernen und hinzufügen, es sei denn die Liste "Items" ist leer dann bekomme ich folgende fehlermeldung:> Fehlermeldung:

Das angegebene Argument liegt außerhalb des gültigen Wertebereichs.
Parametername: index

Weitere infos:
{System.Collections.ListDictionaryInternal}
{System.Object GetItemAt(Int32)}
Count = 0

Ich finde einfach keine lösung dafür.
Die Add methode die ich zum hinzufügen verwende ist die der IList:

 
public int Add(object value)
        {
            var @out = ((IList)Items).Add(value);
            RaisePropertyChanged("Count");
            RaisePropertyChanged("Items");
            CollectionChanged(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, value));
            return @out;
        }

Ich kann in diesem fall leider nicht von der ObservableCollection<Test> ableiten.

[Edit:
Es tritt auch auf wenn ich willkürlich element hinzufüge und entferne(Aber nicht immer).

B
218 Beiträge seit 2012
vor 9 Jahren

Ich habe eine klasse an ein datagrid gebunden, die Klasse implementiert:

Was hast du denn gebunden?

IEnumerable, IEnumerable<Test>, IList<Test>, INotifyCollectionChanged, IList.
Die zugrundeligende Liste mit der ich arbeite "ObservableCollection<Test> Items";

Du hast 2 verschiedene Klassen? Wieso nicht die ObservableCollection<Test> verwenden, wenn die ObservableCollection all deine Interfaces bereits implementiert?

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 9 Jahren

Stimmt, Ich hab ein wenig zu flach gedacht, *Ich hatte anfangs nicht die möglichkeit eine ObservableCollection zu verwenden weshalb ich die funktionallität selbst implementieren musste.

Ich hab einfachnich dran gedacht das DataBinding auf die Observablecollection zu setzten, sondern mich auf die Klasse versteigft 😄.

Danke.

Dennoch stellt sich die frage warum das Programm abstürtzt, laut MSDN ist die implementierung korrekt...?

5.657 Beiträge seit 2006
vor 9 Jahren

Hi Robin0,

Dennoch stellt sich die frage warum das Programm abstürtzt, laut MSDN ist die implementierung korrekt...?

Wenn ich es richtig verstanden habe, stürzt nichts ab, sondern es wird eine Exception geworfen. Leider enthältst du uns vor, an welcher Stelle deine Implementierung die Exception geworfen wird. Ohne solche Informationen können wir da natürlich nur raten, siehe auch [Hinweis] Wie poste ich richtig?, Punkt 5: "Problem genau beschreiben - inkl. genauer Fehlermeldung - und konkrete Fragen stellen".

Ich würde anhand der Exception vermuten, daß die Ursache irgendwo in deiner INotifyCollectionChanged-Implementierung zu suchen ist, aber das läßt sich auch sehr einfach mit dem Debugger herausfinden: [Artikel] Debugger: Wie verwende ich den von Visual Studio?.

Ich würde zuersteinmal versuchen, die PropertyChanged-Ereignisse in einer anderen Reihenfolge auszulösen: Erst "Items", dann "Count". Sonst kann evtl. mit einem neuen (höheren) Index auf eine immer noch leere Collection zugegriffen wird.

Christian

Weeks of programming can save you hours of planning

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 9 Jahren

Die exception wird im presentation framework geworfen genauer gesagt in "System.Collections.ListDictionaryInternal", nachdem ich mit der bearbeitung(Hinzufügen/entfernen fertig bin).

An der reihenfolge der INotifyPropertyChanged aufrufe liegt es leider nicht.

Zu dem genauen problem: Es wird eine exception geworfen, an einer stelle an der ich kein einfluss auf die Programmstabilität habe.

Ich denke es liegt am rückgabewert der Add methode denn das ist der einzige wert andem ich eine zahl zurückgebe.

16.806 Beiträge seit 2008
vor 9 Jahren

Kann das sein, dass das eine interne, bereits behandelte Exception ist und Du das nur im Debugger siehst, weil Du den dazugehörigen Haken in den Exception-Einstellungen gesetzt hast?
Stürzt das jetzt immernoch ab, wenn Du direkt von ObservableCollection<Test> erbst wie es BlackMatrix gesagt hat?

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 9 Jahren

Wenn ich die ObservableCollection verwende stürtzt das programm nichtmehr ab.
Ich kann nicht vonder ObservableCollection<Test> ableiten.

Ich kann in der datenbindung allerdings Path=Items angeben.

16.806 Beiträge seit 2008
vor 9 Jahren

Dann scheints so, dass Deine Implementierung eben doch nicht der "echten" ObservableCollection entspricht.
Ob jetzt die MSDN hier auch einen Fehler gemacht hat in ihrer Vorlage oder Du ist nicht ersichtlich.

Warum solltest Du von ObservableCollection nicht ableiten können?
Tun doch andere Framework-Klassen ebenfalls. Und abstract ist diese auch nicht.

R
Robin0 Themenstarter:in
212 Beiträge seit 2012
vor 9 Jahren

Ich hab schon eine andere Bassklasse aus dem grund kann ichnicht von der ObservableCollection<T> ableiten.