Das bekannte Programm zur optimalen Vorbereitung auf die theoretische Führerscheinprüfung
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 26. Mai 2016 um 23:37:50
Antwort Hi Nico,
freut mich dass du dir für mein kleines Problemchen Zeit genommen hast.
Also vom Prinzip her geht es also! Gut, dann brauchen wir ja nur noch raus zu finden was ich richtig machen muss damit es auch bei mir funktioniert!
Du vermutest das Problem eher bei der Datenbank? Es handelt sich aber dabei um eine "normale" SQL Datenbank, müsste die eigentlich nicht problemlos damit klar kommen? (damit meine ich die Kommunikation mit der ObservableCollection)
Also in meinem Projekt wirken mit:
- Ein Entity Model aus einer SQL Datei generiert. SQL Datei (.MDF) enthält zwei "1 to n related" Tabellen.
- Eine ObservableCollection (of "myEntityModel")
- Und eine CollectionViewSource an die das ListView gebunden ist. (im xaml Code)
Ich poste dir mal ein paar Code-Fragmente. Dann kriegst du bestimmt einen besseren Überblick über die Lage.
Aber eine Frage muss ich aber, so oder so los werden. In einem funktionierenden System mit Entity model, ObservableCollection (of T) und CollectionViewSource. Wenn man z.B. einen Datensatz löschen will, muss man den dann aus dem Entity model oder aus der ObservableCollection entfernen (sprich "removen")?? Damit die ListView das "automatisch" mitbekommt?
Hier also meine Code-Fragmente:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:Local="clr-Namespace:CreateRelatedSqlTables_v1" mc:Ignorable="d" Title="MainWindow"
Height="620" Width="880" Loaded="Window_Loaded">

<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 im Code behind:
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
Können wir schon ein paar Änderungen vornehmen um meinem Ziel etwas näher zu kommen? Also Vorrangig wäre für mich erst mal das Funktionieren der Anwendung. Un die Regeln für ein "korrektes" MVVM Konzept werde ich mich dann später bemühen....versprochen
Danke ,
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