VB.Net-Forum - Beitragsübersicht -
ThemaV12: ObservableCollection, nur bedingte Benachrichtigung.
Von Jeiss
Datum 23. Mai 2016 um 22:08:04
Frage Hallo,
meine Frage betrifft das arbeiten mit der ObservableCollection(Of T)-Klasse.
Bei MSDN liest man diesbezüglich so schön: Stellt eine dynamische Datenauflistung dar, die Benachrichtigungen bereitstellt, wenn Elemente hinzugefügt oder entfernt werden oder wenn die gesamte Liste aktualisiert wird.
Das klang so vielversprechend, dass ich mir ein WPF Projekt angelegt habe um zu sehen ob sogar ich mittels dieser Klasse, mit meinen bescheidenen Kenntnissen, ein schönes Projekt erschaffen könnte.
Ich musste aber leider sehr schnell feststellen, dass das doch ein gewisses Mass an Fachkenntnissen verlangt.
Und jetzt bin ich an dem Punkt angelangt wo ich trotz Google, MSDN un co nur noch im Kreis rumdrehe. Und jetzt hoffe ich natürlich, dass jemand so nett und hilfsbereit ist um mir weiter zu helfen.

Ich versuche mal so gut ich kann mein Projekt mit meinen eigenen Worten zu beschreiben.
Es handelt sich um ein WPF Projekt mit Visual Studio 2015. Die Daten welche die Desktopanwendung bearbeiten soll stammen aus einer SQL Datenbank mit gleich 2 Tabellen die in einer "1 to n parent/child" Relation verbunden sind.
Diese Daten werden im Projekt als Entity Model bereitgestellt. Oder müsste ich doch besser sagen, dass das Model aus der .MDF Datei erstellt wurde und zum Projekt gehört.
Die Datensätze sollen dann schlussendlich in einem ListView dargestellt werden. Und der Gedanke war eigentlich der, dass beim löschen oder hinzufügen eines "Datensatzes" das Element im UI das gleich mit bekommen sollte und dann auch gleich anzeigen sollte.
Dank der in der ObservableCollection-Klasse bereitgestellten INotifyCollectionChanged und INotifyPropertyChanged Schnittstellen hatte ich mir viel weniger Schwierigkeiten erwartet.
Und jetzt habe ich natürlich viele Fragen an euch. Erstens, kann mit der oben beschriebenen "Konstellation" in meinem Projekt mittels der ObservableCollection(Of T)-Klasse erreicht werden, dass ohne viel Programmierung-Aufwand, eine funktionierende Anwendung entstehen kann?
Oder gilt das nur unter bestimmten Bedingungen? (vielleicht nicht bei Verwendung eines Entity Models?)
Oder liegt es einfach nur an Fehlern in meinem Projekt, dass das mit der "Benachrichtigung" nicht so gut klappt?
Da ich ja hoffe, dass jemand mir seine Hilfe anbieten wird, übe ich besser gleich mal wie man Code posten kann.
Hier mal zum Test ein (bestimmt für ein besseres Verständnis meines Problems nützlicher) Ausschnitt aus der xaml Datei aus dem "MainWindow".
    <Window.Resources>
<CollectionViewSource x:Key="TodosView"/>
<!--<CollectionViewSource x:Key="StagesView" Source="{Binding Source={StaticResource TodosView}, Path='Stages'}" />-->
<CollectionViewSource x:Key="StagesView" Source="{Binding Stages, Source={StaticResource TodosView}}" />
</Window.Resources>
Besten Dank im Voraus,
Jeiss
Antwort:
Von Jeiss
Datum 28. Mai 2016 um 12:36:55
Antwort Hi Nico,
deine Antwort hat mir zu vielen neuen Anregungen verholfen, das hat und wird mich auch noch ein Weilchen beschäftigen. Auf jeden fall sehr aufregend!
Mit deiner Annahme über das Entity Model und DbSet(Of T)lagst du voll richtig, und das klappt. Hab ein bisschen damit rum gespielt, überzeug dich selbst wie jetzt zur Zeit mein Code ausschaut:
    Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)

TodosEntities = New RelatedTablesEntities()
TodosData = New ObservableCollection(Of Todo)(TodosEntities.Todos)
cvsTodos = CType(Me.Resources("TodosView"), CollectionViewSource)
'cvsTodos.Source = TodosData
cvsTodos.Source = TodosEntities.Todos.Local

End Sub
Zitat:
Die Verwendung der CollectionViewSource ist übrigens auch (in der derzeitigen Form) überflüssig. Du kannst direkt an TodosdData binden.

Stimmt ganz bestimmt, wage nicht mal dran zu zweifeln
Die Daseinsberechtigung der CollectionViewSource ist die, dass ich sonst nicht weiß wie ich (später einmal) sonst eine "SortDescriptioen" und das "Konzept" des "currentItem" unter all seinen Formen in mein Projekt einbauen könnte.
Und was das direkte binden meiner ListView an TodosData angeht, hab ich keine Ahnung wie ich das vom xaml Code meines MainWindows aus anstellen könnte. Denn irgendwann, wenn die funktionellen Fragen gelöst sind, will ich mich trotzdem bemühen, so gut ich kann, die regeln des WPFs zu respektieren und so nichts als nur den nötigsten Code im CodeBehind zu schreiben. Soweit zu der CollectionViewSource und dem Binden an ObservableCollection(Of Todo). Hättest du in dem Zusammenhang vielleicht noch eine zusätzliche Bemerkung oder Anregung, was ich vielleicht noch bedenken sollte?
Da sind noch zwei Gedanken die mich trotz deiner Hilfe beschäftigen.
1) Das Arbeiten mit TodosEntities.Todos.Local (DbSet(Of T)) wird später doch bestimmt Einschränkungen mit sich bringen. Ich werde ja wohl nicht darum rum kommen eine ObservableCollection als Property in einer separaten ViewModelKlsse zu erstellen. Und das wird ja dann bestimmt auch das Binden meiner ListView vom xaml Code aus vereinfachen, oder nicht?
Und zweitens, vielleicht auch meine wichtigste Frage, da es in diesem Thema ja die ganze Zeit um die "automatische" Benachrichtigung meines ListViews bei Änderungen an den Daten geht.
Nachdem ein Datensatz geändert, hinzugefügt oder gelöscht worden ist, ist dann irgend ein Aufruf, ein Refresh oder sonst ein Update des Entity Models, der CollectionViewSource oder der ObservableCollection nötig??
So das sind so die Fragen die mich zur Zeit beschäftigen. Ich hoffe du hast noch ein paar gut Ratschläge oder Anregungen für mich.
Danke im Voraus und ein schönes Wochenende,
Jeiss
[ Antwort schreiben | Zurück zum VB.Net-Forum | Forum-Hilfe ]
Antworten
V12: ObservableCollection, nur bedingte Benachrichtigung. - Jeiss 23. Mai 2016 um 22:08:04
Re: ObservableCollection, nur bedingte Benachrichtigung. - Nico 26. Mai 2016 um 13:57:03
Re: ObservableCollection, nur bedingte Benachrichtigung. - Jeiss 26. Mai 2016 um 23:37:50
Re: ObservableCollection, nur bedingte Benachrichtigung. - Nico 27. Mai 2016 um 08:27:13
Re: ObservableCollection, nur bedingte Benachrichtigung. - Jeiss 28. Mai 2016 um 12:36:55
Re: ObservableCollection, nur bedingte Benachrichtigung. - Nico 29. Mai 2016 um 14:41:52

Ihre Antwort
(Nick-)Name   Wichtige Informationen zur Namensangabe
E-Mail (opt.)  Wichtige Informationen zur Angabe einer eMail-Adresse
Thema   Wichtige Informationen zur Angabe eines Themas
Betrifft (IDE)  VB 2012
Ihre Antwort
Smilies
Mehr...
FettKursivUnterstrichen   Übersicht der Tipp-KürzelÜbersicht der Projekt-KürzelÜbersicht der Bücher-Kürzel 
Homepage
Titel
Root-Smilies              
             
             
[ Zurück zum VB.Net-Forum | Forum-Archiv | Forum-Hilfe | Chat ]

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB.Net | VB/VBA-Forum | DirectX | DirectX-Forum | Chat | Ausschreibungen | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 13. Dezember 2015