myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: WPF und Silverlight » Databind ObservableCollection Datagrid (WPF / MVVM)
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Databind ObservableCollection Datagrid (WPF / MVVM)

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 24


Moritz83 ist offline

Databind ObservableCollection Datagrid (WPF / MVVM)

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,

ich versuche im Moment mich in C# und MVVM einzuarbeiten, allerdings scheitere ich am Databinding. Hoffe jemand hat Lust und Zeit mir kurz unter die Arme zu greifen, wäre echt dankbar!

Die Idee ist (wie hier angesprochen ->  SQLite (Mehrere User updaten denselben Eintrag - Was passiert?)) aus einer SQLite Datei Name und Vorname auszulesen und in einem Datagrid darzustellen. Habe den Code von Code-Behind auf MVVM (oder zumindest im Ansatz) umgebaut aber nun bleibt mein Datagrid leer. Da die FOR Schleife im ViewModel allerdings Daten ausspuckt gehe ich davon aus, das etwas mit der Rückmeldung an die View nicht passt (inotifypropertychanged fehlt noch komplett, damit stehe ich noch auf Kriegsfuss).

Was ich bis jetzt habe:

Mitarbeiter.cs (Model)

C#-Code:
namespace SQLite.Models
{
    public class Mitarbeiter
    {
        public Mitarbeiter(string vorname, string nachname)
        {
            Vorname = vorname;
            Nachname = nachname;
        }

        public string Vorname { get; set; }
        public string Nachname { get; set; }
    }
}

MainWindowViewModel.cs (ViewModel)

C#-Code:
using System;
using System.Collections.ObjectModel;
using System.Data.SQLite;
using SQLite.Models;

namespace SQLite.ViewModels
{
    class MainWindowViewModel
    {
        public ObservableCollection<Mitarbeiter> Test;

        public MainWindowViewModel ()
        {
            FetchData();
        }

        void FetchData()
        {
            string connectionString = "Data Source=C:\\Users\\Moritz\\Desktop\\Test.db" + ";Version=3;";
            SQLiteConnection connection = new SQLiteConnection(connectionString);
            SQLiteCommand cmd = new SQLiteCommand("select * from Mitarbeiter", connection);
            Test = new ObservableCollection<Mitarbeiter>();
            connection.Open();
            SQLiteDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                string Vorname = reader.GetString(1);
                string Nachname = reader.GetString(2);
                Test.Add(new Mitarbeiter(Vorname, Nachname));
            }

            //TEST
            for (int i = 0; i < Test.Count; i++)
            {
                Console.WriteLine(string.Concat(Test[i].Vorname, "---", Test[i].Nachname));
            }
            //TEST
        }
    }
}

MainWindow.xaml.cs (View)

C#-Code:
using System.Windows;
using SQLite.ViewModels;

namespace SQLite.Views
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainWindowViewModel();

            ///////////////////LÖSCHEN
            //string connectionString = "Data Source=C:\\Users\\Moritz\\Desktop\\Test.db" + ";Version=3;";
            //SQLiteConnection connection = new SQLiteConnection(connectionString);
            //SQLiteCommand cmd = new SQLiteCommand("select * from Mitarbeiter", connection);
            //ObservableCollection<Mitarbeiter> Test = new ObservableCollection<Mitarbeiter>();
            //connection.Open();
            //SQLiteDataReader reader = cmd.ExecuteReader();
            //while (reader.Read())
            //{
            //    string Vorname = reader.GetString(1);
            //    string Nachname = reader.GetString(2);
            //    Test.Add(new Mitarbeiter(Vorname, Nachname));
            //}
            //dt1.ItemsSource = Test;
            ///////////////////LÖSCHEN

        }
    }
}

MainWindow.xaml (View)

C#-Code:
<Window x:Class="SQLite.Views.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"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Grid>
        <DataGrid ItemsSource="{Binding Test}" AutoGenerateColumns="True" Name="dt1" HorizontalAlignment="Left" Height="235" Margin="59,60,0,0" VerticalAlignment="Top" Width="663"/>
    </Grid>

</Window>

Ich weiss das der Code alles andere als "ideal" ist (using für die SQLite Connection fehlt, etc) aber ich wollte Step By Step vorgehen um dafür das Ganze besser zu verstehen. Normalerweise frage ich nicht nach "Gesamtlösungen" aber ich probiere hier seit Stunden rum und vermute das ich einen fatalen Denkfehler mache.
Neuer Beitrag 13.04.2019 09:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.330
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Beim DataBinding müssen Eigenschaften (properties), anstatt Membervariablen verwendet werden, also:

C#-Code:
public ObservableCollection<Mitarbeiter> Test { get; /*private*/ set; }

Bei DataBinding-Problemen immer auch im VS-Log ("Ausgabe Fenster") nachschauen (in den Optionen gibt es eine Einstellung, was alles genau protokolliert wird). Überprüfe also ersteinmal, ob und was dir genau (zur Laufzeit während des Debuggens) ausgegeben wird, damit du weißt, wonach du mal bei weiteren Problemen schauen mußt.
Neuer Beitrag 13.04.2019 09:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Moritz83
myCSharp.de-Mitglied

Dabei seit: 27.05.2013
Beiträge: 24

Themenstarter Thema begonnen von Moritz83

Moritz83 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

enttäuscht au weia, habs ja gesagt .... den Wald vor lauter Bäumen nicht mehr sehen.

Danke dir, klappt alles wunderbar!
Neuer Beitrag 13.04.2019 09:48 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 16.09.2019 01:02