Hallo Leute,
es ist mir wohl bekannt, dass das gar nicht gerne gesehen wird wenn man die gleiche Frage in verschiedene Foren postet. Ja ist ja klar!
Ich erlaube mir trotzdem, ausnahmsweise gegen diese Regel zu verstoßen! Aber nicht ohne Grund. Vor ein paar Tage hab ich meine Frage nämlich schon einmal in einem anderen Forum gepostet und erst im nachhinein bemerkt, dass die letzte Antwort auf eine Frage vom 1. April stammt.....
Ich hoffe das nimmt also keiner mir übel.
Die Fragen auf die ich eine Antwort suche sind im Zusammenhang mit der ObservableCollection(Of T)-Klasse.
Bei MSDN steht zu dem Thema folgendes geschrieben: 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.....
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, welche in einer "1 to n parent/child" Relation zueinander stehen.
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 mit 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 besagten ListView) das gleich mit bekommen sollte und dann auch gleich die Änderungen 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 Programmierungs-Aufwand, eine funktionierende Anwendung entstehen kann, welche vom User durchgeführten Änderungen sofort an das ListView Element "weiter leitet"?
Oder gilt das nur unter bestimmten Bedingungen? (vielleicht nicht bei Verwendung eines Entity Models?) Muss trotz des Entity Models noch zusätzlich eine "Daten Klasse" welche von NotifyPropertyChanged "erbt", so ähnlich wie es im Tutorial namens "MVVM-Anwendungs-Struktur" hier bei VB-Paradise mit der Klasse "Person" vorgeführt wird, hinzugefügt werden?
Oder, stimmt die Idee doch, und es liegt an Fehlern in meinem Projekt, dass das mit der "Benachrichtigung" nicht so gut klappt?
Und was mir auch nicht klar ist, wo sollen eventuelle Datenänderungen überhaupt durchgeführt werden? Beim Löschen eines Datensatzes, muss der aus dem Entity Model entfernt werden oder eher aus der ObservableCollection?
Wie ihr seht, ist mir noch vieles unklar...
So, jetzt versuche ich noch ein paar Code-Ausschnitte zu posten. Mit deren Hilfe erkennt ihr mein Vorhaben bestimmt besser...
Und hier noch dien ersten Zeilen aus dem Code behind des MainWindows:
Ich danke euch schon im Voraus für eure Hilfe. Ich bin für jeden Vorschlag, Hinweis oder sonstiger Tip sehr dankbar.
Jeiss
es ist mir wohl bekannt, dass das gar nicht gerne gesehen wird wenn man die gleiche Frage in verschiedene Foren postet. Ja ist ja klar!
Ich erlaube mir trotzdem, ausnahmsweise gegen diese Regel zu verstoßen! Aber nicht ohne Grund. Vor ein paar Tage hab ich meine Frage nämlich schon einmal in einem anderen Forum gepostet und erst im nachhinein bemerkt, dass die letzte Antwort auf eine Frage vom 1. April stammt.....
Ich hoffe das nimmt also keiner mir übel.
Die Fragen auf die ich eine Antwort suche sind im Zusammenhang mit der ObservableCollection(Of T)-Klasse.
Bei MSDN steht zu dem Thema folgendes geschrieben: 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.....
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, welche in einer "1 to n parent/child" Relation zueinander stehen.
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 mit 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 besagten ListView) das gleich mit bekommen sollte und dann auch gleich die Änderungen 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 Programmierungs-Aufwand, eine funktionierende Anwendung entstehen kann, welche vom User durchgeführten Änderungen sofort an das ListView Element "weiter leitet"?
Oder gilt das nur unter bestimmten Bedingungen? (vielleicht nicht bei Verwendung eines Entity Models?) Muss trotz des Entity Models noch zusätzlich eine "Daten Klasse" welche von NotifyPropertyChanged "erbt", so ähnlich wie es im Tutorial namens "MVVM-Anwendungs-Struktur" hier bei VB-Paradise mit der Klasse "Person" vorgeführt wird, hinzugefügt werden?
Oder, stimmt die Idee doch, und es liegt an Fehlern in meinem Projekt, dass das mit der "Benachrichtigung" nicht so gut klappt?
Und was mir auch nicht klar ist, wo sollen eventuelle Datenänderungen überhaupt durchgeführt werden? Beim Löschen eines Datensatzes, muss der aus dem Entity Model entfernt werden oder eher aus der ObservableCollection?
Wie ihr seht, ist mir noch vieles unklar...
So, jetzt versuche ich noch ein paar Code-Ausschnitte zu posten. Mit deren Hilfe erkennt ihr mein Vorhaben bestimmt besser...
XML-Quellcode
- <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}}" />
- <!--<my:DataClass x:Key="viewMod" />-->
- </Window.Resources>
- <Grid DataContext="{Binding Source={StaticResource TodosView}}">
- .
- .
- .
-
Und hier noch dien ersten Zeilen aus dem Code behind des MainWindows:
VB.NET-Quellcode
- Imports System.Collections.ObjectModel
- Class MainWindow
- Public TodosEntities As RelatedTablesEntities
- Public cvsTodos As New CollectionViewSource
- Public TodosdData As ObservableCollection(Of Todo)
- Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
- TodosEntities = New RelatedTablesEntities()
- TodosdData = New ObservableCollection(Of Todo)(TodosEntities.Todos)
- 'TodosdData = New ObservableCollection(Of Todo)(From t In TodosEntities.Todos.Include("Stages"))
- cvsTodos = CType(Me.Resources("TodosView"), CollectionViewSource)
- cvsTodos.Source = TodosdData
- End Sub
- .
- .
- .
Ich danke euch schon im Voraus für eure Hilfe. Ich bin für jeden Vorschlag, Hinweis oder sonstiger Tip sehr dankbar.
Jeiss