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
[gelöst] ListBox DataBinding mit Entity Framework
cav3man
myCSharp.de - Member



Dabei seit:
Beiträge: 5
Herkunft: Mettmann

Themenstarter:

[gelöst] ListBox DataBinding mit Entity Framework

beantworten | zitieren | melden

Hallo zusammen,

ich hab folgendes Problem. Ich hab eine SQL CE 3.5 Datenbank mit ein paar Tabellen die über das Entity Framework mit meiner Anwendung verknüpft wird.
In der Anwendung habe ich eine ListBox in der ich die Einträge einer Tabelle über DataBinding darstelle.
Das Funktioniert soweit ohne Probleme.

In der Maske habe ich quasi auf der linken Seite die Liste und rechts daneben ist ein Eingabedialog wo man neue Datensätze eingeben kann.

Das Problem ist das sich die Liste nicht automatisch aktualisiert sobald ein neuer Eintrag die Datenbank geschrieben wird.

XAML ListBox
<ListBox Name="BodyratingsListBox" ItemTemplate="{StaticResource BodyratingListBoxItem}" ItemsSource="{Binding}" Margin="5" />

XAML ListBoxItem Template

<UserControl.Resources>
        <DataTemplate x:Key="BodyratingListBoxItem">
            <StackPanel>
                <StackPanel Orientation="Horizontal" Margin="1">
                    <Label FontWeight="Bold" FontSize="14" Content="{Binding Path=Date}" Margin="1" />
                    <Label FontWeight="Bold" FontSize="14" Content="{Binding Path=Moods.Name}" Margin="1" />
                </StackPanel> 
                <StackPanel Orientation="Horizontal" Margin="1">
                    <Label Content="Gewicht:" Margin="1" />
                    <Label Content="{Binding Path=Weight}" Margin="1" /> 
                    <Label Content="kg" Margin="1" />
                    <Label Content="Fett:" Margin="1" />
                    <Label Content="{Binding Path=Fat}" Margin="1" />
                    <Label Content="%" Margin="1" />
                    <Label Content="Ruhepuls:" Margin="1" />
                    <Label Content="{Binding Path=PulseResting}" Margin="1" />
                </StackPanel>  
            </StackPanel>
        </DataTemplate>
    </UserControl.Resources>

Zuweisung der Entität zur ListBox

public BodyRatingInputUserControl()
        {
            [...]
            athlet = new AthletEntities();
            BodyratingsListBox.DataContext = athlet.Bodyratings;
        }

Anlegen eines neuen Datensatzes

         private void AddButton_Click(object sender, RoutedEventArgs e)
        {
            Bodyratings bodyRating = new Bodyratings();
                [... Bodyrating Properties befüllen]

                athlet.AddToBodyratings(bodyRating);
                athlet.SaveChanges();

                BodyratingsListBox.DataContext = null;
                BodyratingsListBox.DataContext = athlet.Bodyratings;

                string blah = string.Empty;

                IQueryable<Bodyratings> query = from b in athlet.Bodyratings orderby b.Date descending select b;
                foreach (Bodyratings b in query)
                {
                    blah += b.Date + " ";
                }

                MessageBox.Show(blah);
        }

Die Messagebox am Ende hab ich nur drin um zu checken ob der Datensatz auch wirklich in der Datenbank gelandet ist... und das ist er.

Ich hoffe ihr könnt mir helfen.
Schonmal danke im vorraus.

Schönen Gruß
cav3man
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von cav3man am .
private Nachricht | Beiträge des Benutzers
Lector
myCSharp.de - Member



Dabei seit:
Beiträge: 862

beantworten | zitieren | melden

von welchem Typ ist denn athlet.Bodyratings?
private Nachricht | Beiträge des Benutzers
schaedld
myCSharp.de - Member

Avatar #avatar-2533.jpg


Dabei seit:
Beiträge: 1.433
Herkunft: Schweiz

beantworten | zitieren | melden

Verwende ObservableCollection. Hierzu noch dieser Beitrag.
Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt
private Nachricht | Beiträge des Benutzers
cav3man
myCSharp.de - Member



Dabei seit:
Beiträge: 5
Herkunft: Mettmann

Themenstarter:

beantworten | zitieren | melden

Hi

also athlet.Bodyratings ist vom Typ Bodyratings ^^ ist halt eine Entität vom Entity Data Model.

Hmm ObservableCollection ist ja schön und gut. Vielleicht hab ich das was falsch verstanden aber im Prinzip müsste ich ja dann eine ObservableCollection erstellen die ich mit der ListBox per DataBinding verbinde. Aber ich müsste ja immernoch jedes neue Object was ich der Datenbank hinzufüge manuell in die ObservableCollection schreiben... oder hab ich was falsch verstanden das man die ObservableCollection direkt mit der Entität verbinden kann.
Ich werd mir das auf jeden Fall nochmal genauer angucken.
Danke für den Tipp.

Ich hab das Problem auf jeden Fall gestern nach Stundenlangen frikeln noch gelöst bekommen... vielleicht nicht die schönste Art aber es funktioniert *g*

Es musste einfach nur die Stelle


BodyratingsListBox.DataContext = null;
BodyratingsListBox.DataContext = athlet.Bodyratings;

durch

BodyratingsListBox.DataContext = athlet.Bodyratings.Select(b => b);

ersetzt werden und dann läufts. Scheinbar wird die Entität nicht automatisch aktualisiert und man muss nochmal ein Select über alle Einträge laufen lassen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von cav3man am .
private Nachricht | Beiträge des Benutzers