Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Leeres DataGrid Element hinzufügen
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

Themenstarter:

Leeres DataGrid Element hinzufügen

beantworten | zitieren | melden

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:
Fehler
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).
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Robin0 am .
private Nachricht | Beiträge des Benutzers
BlackMatrix
myCSharp.de - Member



Dabei seit:
Beiträge: 220

beantworten | zitieren | melden

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

Was hast du denn gebunden?
Zitat von Robin0
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?
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

Themenstarter:

beantworten | zitieren | melden

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 :D.

Danke.

Dennoch stellt sich die frage warum das Programm abstürtzt, laut MSDN ist die implementierung korrekt...?
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi Robin0,
Zitat von 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
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15705
Herkunft: BW

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

Themenstarter:

beantworten | zitieren | melden

Ich hab schon eine andere Bassklasse aus dem grund kann ichnicht von der ObservableCollection<T> ableiten.
private Nachricht | Beiträge des Benutzers