Laden...

WPF - Binding einer DataGridComboBoxColumn in DataGrid

Erstellt von matte vor 8 Jahren Letzter Beitrag vor 8 Jahren 13.323 Views
M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren
WPF - Binding einer DataGridComboBoxColumn in DataGrid

Hi Leute,

hoffe ich bin hier richtig.

Habe im WPF einen Datagrid indem ich mir eine Spalte mit einer Combobox angelegt habe:


        <DataGrid AutoGenerateColumns="False" Height="158" HorizontalAlignment="Left" Margin="23,210,0,0" Name="dgrTageAuswahl" VerticalAlignment="Top" Width="313">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Tag" IsReadOnly="True" Binding="{Binding Tag}"></DataGridTextColumn>
                <DataGridTemplateColumn Header="Datum">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding Datum}" BorderThickness="0"></DatePicker>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridComboBoxColumn Header="ART">
                </DataGridComboBoxColumn>
            </DataGrid.Columns>
        </DataGrid>

Würde hier gerne die ComboBox aus einer Sql-Tabelle befüllen...
Hatte davor eine "normale" Combobo" und habe es so gemacht:


            SqlConnection sqlCon = new SqlConnection(ConnString);
            sqlCon.Open();
            string Query = "Select ID,Art from Test";
            SqlCommand creatCommand = new SqlCommand(Query, sqlCon);
            SqlDataReader dr = creatCommand.ExecuteReader();

            while (dr.Read())
            {
                string name = dr.GetString("Art");
                combobox1.items.add(name);

            }

Komme aber hier überhaupt nicht klar...
Kann die Daten natürlich auch in eine DataTable oder so einlesen - aber wie binde ich meine ComboboxColumn daran?

Hinweis von Coffeebean vor 8 Jahren

Ich habe mal den Titel editiert. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3. Wenn du einen besseren Vorschlag hast, dann editier ihn nochmal. Kein Suchender wird wissen, was mit dem Titel "WPF Datagrid Combobox" gemeint ist, wenn er den Thread in der Suche findet. Dein Problem hat mit dem Binding einer DataGridComboBoxColumn zu tun. Das sollte im Titel auch klar werden.

5.299 Beiträge seit 2008
vor 8 Jahren

Würde hier gerne die ComboBox aus einer Sql-Tabelle befüllen... Aus einer Sql-Tabelle kann man ein Datenmodell befüllen - eine Combobox oder ComboboxColumn kannst du daraus nicht befüllen.

Ans Datenmodell kannst du die Combobox(Column) binden.

Mehr kann ich dazu nicht sagen, denn ich kenne dein Datenmodell nicht.

Edit: Ich sehe grade Hinweise, dass du überhaupt kein Datenmodell hast, und dass du tatsächlich Controls mittels DataReader-Schleifen befüllst.

Vlt. magst du dich mal zum MVVM-Pattern schlau machen, weil sone Control-Befüllerei ist über kurz oder kürzer kaum mehr zu bewältigen.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Hi,

danke für die Antwort...

das mit dem Reader habe ich jetzt nur bei der ComboBox als "Test" genommen.

Normal befülle ich es so:


            string Query = "Select ID,Art from Test";
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = ConnString;
            SqlCommand command = new SqlCommand();
            command.Connection = conn;
            command.CommandText = Query;

            DataTable dt = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter(command);
            adapter.Fill(dt);

            dgrTageAuswahl.ItemsSource = dt.AsDataView();

Ich bekomme das mit der ComboBox aber nicht wirklich hin...

Habe nur wenige Selects wirklich im Code - eigentlich nur um einige wenige Forms zu füllen. Die Restlichen (Insert, Update, Delete bzw. auch Userbezogene) sind in einer Stored-Procedure am Server.

5.299 Beiträge seit 2008
vor 8 Jahren

Nachwievor nichts, was ich als "Datenmodell" oder "Viewmodel" bezeichnen würde.
Und ItemsSource ist etwas, was man im Xaml setzen sollte, halt mit Databinding. Databinding ist ein Bestandteil des MVVM-Patterns.

Wie gesagt: MVVM-Pattern erlernen.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Was hat jetzt aber das Datenmodell mit meiner Frage zu tun? ?(

Hätte nur gerne gewusst wie ich eine ComboboxColumn in einem Datagrid befülle...

Sorry aber das sind Codebeispiele - was würde dir leicht noch fehlen? Das ist keine große Anwendung 8).

5.299 Beiträge seit 2008
vor 8 Jahren

Sagte ich doch schon in meim ersten post:

In Wpf hat man ein Viewmodel, und im Xaml bindet man Controls daran.

Ohne Model kein Databinding und kein MVVM.
Tatsächlich weiß ich gar nicht, wie man anders eine DataGridComboColumn funktionsfähig machen könnte.

Also ich weiß nicht, "wie ich eine ComboboxColumn in einem Datagrid befülle...", (und halte das auch nicht für wissenswert).

Ich weiß, wie man sone Column bindet, aber dazu brauchts halt ein Viewmodel.

Edit: Ich häng mal Beispiel an.
Es zeigt 4 Datagrids. Auf der rechten seite die Grids haben als letzte Spalte eine ComboColumn.
Das Datenmodell ist in einem typisierten Dataset modelliert.
Ist ziemlich lausig, an Dataset zu binden, EF-Entity-Klassen sind da angenehmer, denn bei Entities kann der Xaml-Editor einigermassen geeignete Bindings vorschlagen.

Dafür braucht man bei DatasetOnly keine Datenbank. Wenn du wirklich nur eine kleine Anwendung basteln willst, ist typDataset eine sehr gute Option, denn wie du siehst, ist das so portabel, dass ichs hier gezippt anhängen kann, und es kann bei dir sofort ohne weitere Anpassungen laufen - inklusive Datenbestand.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

🤔 ok danke - damit kenn ich mich eigentlich überhaupt nicht aus - sollte eigentlich nur eine ganz kleine Anwendung werden...

2.207 Beiträge seit 2011
vor 8 Jahren

sollte eigentlich nur eine ganz kleine Anwendung werden...

MVVM hat nichts mit grosser oder kleiner Anwendung zu tun. Wenn sie gross ist ist es besser, man verwendet MVVM. Wenn sie nicht gross ist, hat man den perfekten Platz um es zu lernen. MVVM ist eines der Key-"Features" im WPF. Da führt kein Weg dran vorbei.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Hello,

danke für das Beíspiel - leider funktioniert es überhaupt nicht bei mir... X(

5.299 Beiträge seit 2008
vor 8 Jahren

Du musst es über die WareHouse00\WpfCs\WareHouse\WareHouse.sln öffnen, damit die Helper-Projekte eingebunden sind.
Dann sollte es aber mit F5 loslaufen - sofern du mindestens VS2012 hast.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Die sln habe ich geöffnet - habe hier leider nur die 2010er Version 😭.. habe das Net-Framework ausgebessert - es ist aufgegangen ich kann es nicht ausführen...

Aber zum "Verständniss":

Ich mache mir eine Klasse zum holen dert Daten und eine Klasse ViewModel wo ich diese Daten bestimme bzw. aufbereite..

Dann sollte ich bim DataContext doch diese Klassen auswählen können oder?

Bin ich hier ganz falsch - das ist doch ein großes Gebiet...

5.299 Beiträge seit 2008
vor 8 Jahren

hab den Upload durch eine DownGrade-Version ersetzt - probier nochma.

Zur Frage: Die Klasse ist nicht zum Holen der Daten, sondern versteh sie als modell der Wirklichkeit.
Im Sample gibts ein Warenhaus mit Artikeln, ArtikelKategorien und Lieferanten.

Also das ist die Wirklichkeit: Artikel, ArtikelKategorien Lieferanten

Ein Datenmodell bildet das durch geeignete Klassen ab, wobei insbesondere die Zuordnungen besondere Beachtung verdienen.
Also dass die Artikel, die in wirklichkeit einer Kategorie angehören, auch im Datenmodell eine eindeutig Zuordnung (Relation) erfahren.
Ebenso wie dass modelliert ist, welche Lieferanten welche Artikel liefern.

Auf englisch habich einen Einführungs-Artikel dazu verzapft: [UR=]http://www.codeproject.com/Articles/1030969/Relational-Datamodel-for-Beginners]Relational Datamodel for Beginners[/url]

Wie du das Modell befüllst "Daten holen" - ist eine gänzlich andere Baustelle. Ich empfehle immer, die Daten der Einfachheit halber direkt von Platte zu lesen, ohne iwelches Datenbank-Brimborium drumrum.
Aber natürlich kann man ein Datenmodell auch aus Datenbanken befüllen.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Hi, jetzt funktioniert das Beispiel perfekt!
Werde mir das ganze jetzt mal ansehen..

Echt toll von dir - DANKE!!

So bisschen hineingesehen:
Hatte mir das nicht so schlimm vorgestellt - blicke hier jetzt eigentlich immer weniger durch...

5.299 Beiträge seit 2008
vor 8 Jahren

Hatte mir das nicht so schlimm vorgestellt - blicke hier jetzt eigentlich immer weniger durch... Es ist halb so wild, vieles kann ich dir ja erklären.

Nur musst du auch fragen.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Ich verstehe das einfach nicht - habe jetzt einige Beispiele durchgelesen - die sind alle gut und schön ABER....

Wohin schreibe ich Daten die ich von einer Datenbank hole damit ich diese auch binden kann?

Habe es so gemacht:


dgrTageAuswahl.ItemsSource = dt.AsDataView();

Jedoch ist diese Vorgehensweise falsch - ich verstehe es einfach nicht...

Auch habe ich hier das Problem, dass ich eigentlich die Columns in meinem Datagrid an unterschiedliche Quellen binden mächte. 🤔

Habe auch noch folgendes geschrieben (sollte in dem gleichen Datagrid wie meine Combobox sein):


        private void btnUebernehmen_Click(object sender, RoutedEventArgs e)
        {
            //Liste erstellen um darin die Datums vom Kalender zu speichern
            List<UrlaubsDaten> UrlaubsDatenDataGrid = new List<UrlaubsDaten>();
            // alle ausgewählen Datums auslesen
            foreach (DateTime d in calAuswahl.SelectedDates)
            {
                string EnglWochentag = d.DayOfWeek.ToString();
                UrlaubsDaten Wochentag = new UrlaubsDaten();
                string AutWochentag = Wochentag.WoTagRename(EnglWochentag);

                UrlaubsDatenDataGrid.Add(new UrlaubsDaten { Datum = d, Tag = AutWochentag });
            }

            dgrTageAuswahl.ItemsSource = UrlaubsDatenDataGrid;
        }

Das funktioniert 😁 auch falsch?

Mein XAML-Code sieht hier wie folgt aus (schlimm):


 <Grid Height="388" Width="945">
        <Calendar 
            Height="171" HorizontalAlignment="Left" Margin="12,0,0,184" Name="CalVon" VerticalAlignment="Bottom" Width="205" SelectionMode="MultipleRange" />
        <Button Content="Übernehmen" Height="24" HorizontalAlignment="Left" Margin="223,43,0,0" Name="btnUebernehmen" VerticalAlignment="Top" Width="88" Click="btnUebernehmen_Click" />
        <DataGrid AutoGenerateColumns="False" Height="158" HorizontalAlignment="Left" Margin="23,210,0,0" Name="dgrTage" VerticalAlignment="Top" Width="313">
           <DataGrid.Columns>
                <DataGridTextColumn Header="Tag" IsReadOnly="True" Binding="{Binding Tag}"></DataGridTextColumn>
                <DataGridTemplateColumn Header="Datum">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <DatePicker SelectedDate="{Binding Datum}" BorderThickness="0"></DatePicker>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn> 
                <DataGridComboBoxColumn Header="Urlaubsart">
                </DataGridComboBoxColumn> 
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

Komme nicht weiter....

5.299 Beiträge seit 2008
vor 8 Jahren

Wohin schreibe ich Daten die ich von einer Datenbank hole damit ich diese auch binden kann? Guck den Upload an, den ich dir angehängt hab - wohin werden da die Daten geschrieben, die von Platte gelesen werden?


   class MainViewModel : NotifyPropertyChanged {

      private FileInfo _DataFile = new FileInfo(@"..\..\Data\FourViewsDts.xml");
      private FourViewsDts _Dts = new FourViewsDts();
      public FourViewsDts Dts { get { return _Dts; } }
      private RelayCommand _CmdRefill;
      public RelayCommand CmdRefill { get { return _CmdRefill??(_CmdRefill=new RelayCommand(Refill)); } }

      public MainViewModel() {

      }

      private void Refill() {
         _Dts.Clear();
         _Dts.ReadXml(_DataFile.FullName);
      }

   }

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

So gehe das ganze jetzt von "vorne" an:

Habe mir eine Classe erstellt mit dem namen MainPageViewModel.cs


namespace IdCard
{
    class MainPageViewModel
    {
        public MainPageViewModel()
        {
            this.Person = new Person();
            this.Person.Name = "Matthias";
            this.Person.EMail = "hallo@gmx.at";
        }
        public Person Person { get; set; }
    }
}

würde das gerne in meinem XAML hinzfügen:


<Window x:Class="IdCard.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="using:IdCard"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <vm:MainPageViewModel />
    </Window.DataContext>
     <Grid>
        <TextBox Text="Hallo"></TextBox>
    </Grid>
</Window>

Jedoch = > Fehlermeldung:

Error 1 The tag 'MainPageViewModel' does not exist in XML namespace 'IdCard'. Line 7 Position 10. D:\Visual Studio 2010\Projects\IdCard\IdCard\MainWindow.xaml 7 10 IdCard

Verstehe das nicht - arbeite hier nach Beispielen in einem Buch...

Kann mir das jemand erklären?

LÖSUNG:


<Window x:Class="IdCard.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:IdCard"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <vm:MainPageViewModel x:FieldModifier="ViewModel"/>
    </Window.DataContext>

Meine Visual Studio 2010-Version ist vielleicht veraltet...

P
157 Beiträge seit 2014
vor 8 Jahren

Versuchs mal mit Public 😉 Natürlich unter der Voraussetzung dass du entweder die Assembly korrekt referenziert hast oder die Klasse in der selben Assembly liegt wie dein MainWindow

Wenn's zum weinen nicht reicht, lach drüber!

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

So habe nun wieder mal dafür Zeit gefunden...

Versuche verzweifelt Columns in Datagrid an meine ViewModel zu binden:


<Window x:Class="Urlaube.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:Urlaube.ViewModel"
        Title="Urlaube" Height="374" Width="631">
    <Window.Resources>
        <vm:ViewModelUrlaubstage x:Key="myVM"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource myVM}">
        
        <TextBox Text="{Binding Path=Urlaubsdaten.Tag}" Margin="235,39,217,270"></TextBox>

        <DataGrid Height="120" HorizontalAlignment="Left" Margin="235,82,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="265" DataContext="{Binding Path=Urlaubsdaten}" ItemsSource="{Binding}">
            
            <DataGrid.Columns>
                <DataGridTextColumn Header="Tag" Binding="{Binding Path=Tag}"></DataGridTextColumn>
                <DataGridTextColumn Header="Test" Binding="{Binding Path=Datum}"></DataGridTextColumn>
            </DataGrid.Columns>     
        </DataGrid>
        
    </Grid>
</Window> 

Die Textbox wird hier schön befüllt warum nicht der Datagrid?

1.040 Beiträge seit 2007
vor 8 Jahren

Probiere einfach mal: 😉

ItemsSource="{Binding Path=Urlaubsdaten}"
M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Funktioniert leider nicht...

1.040 Beiträge seit 2007
vor 8 Jahren

Der DataContext im Grid muss zudem raus.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

<Window x:Class="Urlaube.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:Urlaube.ViewModel"
        Title="Urlaube" Height="374" Width="631">
    <Window.Resources>
        <vm:ViewModelUrlaubstage x:Key="myVM"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource myVM}">
        
        <TextBox Text="{Binding Path=Urlaubsdaten.Tag}" Margin="235,39,217,270"></TextBox>
        
        <Calendar Height="163" HorizontalAlignment="Left" Margin="12,12,0,0" Name="calendar1" VerticalAlignment="Top" Width="183" />
        
        <DataGrid Height="120" HorizontalAlignment="Left" Margin="235,82,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="265"  ItemsSource="{Binding Path=Urlaubsdaten}">
            
            <DataGrid.Columns>
                <DataGridTextColumn Header="Tag" Binding="{Binding Path=Tag}"></DataGridTextColumn>
                <DataGridTextColumn Header="Test" Binding="{Binding Path=Datum}"></DataGridTextColumn>
            </DataGrid.Columns>     
        </DataGrid>
        
    </Grid>
</Window>

Nichts..

1.040 Beiträge seit 2007
vor 8 Jahren

Was sagt denn dein Output bzgl. Bindingfehler?

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Bekomme keinen Fehler - er befüllt es einfach nicht..

Kann es eigentlich überall sehr gut auswählen nur eben in der
DataGridTextColumn nicht...

5.299 Beiträge seit 2008
vor 8 Jahren

Dann wird die ViewModelUrlaubstage.Urlaubsdaten- Property - wenn es sie überhaupt gibt - wohl nicht geeignet sein, um eine ItemsSource daran zu binden.

Und bei Binding-Mismatches bekommt man auch keine herkömmlichen Fehler, sondern nur so Fehler-Log-Zeilen ins Output-Fenster oder ins Debug-Fenster (und evtl. noch woanders hin, kommt drauf an, wie's VS eingerichtet ist)

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Ok - hier ist aber nicht viel - sollte nur ein Beispiel sein.
Die Textbox befüllt er aber??


namespace Urlaube.ViewModel
{
    
    public class ViewModelUrlaubstage
    {
        public Urlaubsdaten Urlaubsdaten{get; set;}

        public ViewModelUrlaubstage()
        {
            this.Urlaubsdaten = new Urlaubsdaten();
            this.Urlaubsdaten.Tag = "Mittwoch";
        }
    }
}

1.040 Beiträge seit 2007
vor 8 Jahren

Welchen Typ hat die Urlaubsdaten-Property?
Die ItemsSource setzt ein IEnumerable voraus.

Den Rest hat ErfinderDesRades gesagt. 🙂

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren
namespace Urlaube.Model
{
    public class Urlaubsdaten
    {
        public string Tag { get; set; }
        public DateTime Datum { get; set; }   
    }
}
M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

OK habe das mit dem IEnumerable überlesen.

Das ganze in eine List:


namespace Urlaube.ViewModel
{
    
    public class ViewModelUrlaubstage
    {
        //public Urlaubsdaten Urlaubsdaten{get; set;}
        public List<Urlaubsdaten> ListUrlaubsdaten = new List<Urlaubsdaten>();
        
        public ViewModelUrlaubstage()
        {
            //this.Urlaubsdaten = new Urlaubsdaten();
            //this.Urlaubsdaten.Tag = "Mittwoch";
            this.ListUrlaubsdaten.Add(new Urlaubsdaten {Tag= "mittwoch"});
        }
    }
}

Jetzt finde ich es bei ItemSource aber nicht mehr zum auswählen

P
441 Beiträge seit 2014
vor 8 Jahren

Zum Debuggen von Databindings lege ich mir immer einen "TestConverter" an, der nichts konvertiert, sondern nur einen Breakpoint enthält und gleich value wieder zurückgibt.
So kann man sehr schön sehen ob...*Das Binding generell funktioniert *Was anderes in dem gebundenen Objekt steht als erwartet

Edit:
Das funktioniert nicht, weil deine Property **ListUrlaubsdaten **heißt, dein Binding aber auf Urlaubsdaten geht.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Hi, wollte es auf ListUrlaubsdaten ausbessern aber das findet er nicht...
Bin ich wenigstens am richtigen Weg?

5.299 Beiträge seit 2008
vor 8 Jahren

jo, denke schon.
Oft findet Xaml im Designer nicht gleich die Viewmodel-Properties, weil erst noch kompiliert werden muss.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

🤔


<Window x:Class="Urlaube.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vm="clr-namespace:Urlaube.ViewModel"
        Title="Urlaube" Height="374" Width="631">
    <Window.Resources>
        <vm:ViewModelUrlaubstage x:Key="myVM"/>
    </Window.Resources>
    
    <Grid DataContext="{Binding Source={StaticResource myVM}}">
        
        <TextBox Text="{Binding Path=Urlaubsdaten.Tag}" Margin="235,39,217,270" DataContext="{Binding}"></TextBox>
        
        <Calendar Height="163" HorizontalAlignment="Left" Margin="12,12,0,0" Name="calendar1" VerticalAlignment="Top" Width="183" />
        
        <DataGrid Height="120" HorizontalAlignment="Left" Margin="235,82,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="265" ItemsSource="{Binding Path=ListUrlaubsdaten}">  
            <DataGrid.Columns>
                <DataGridTextColumn Header="Tag" Binding="{Binding Path=ListUrlaubsdaten.Tag}"></DataGridTextColumn>
                <DataGridTextColumn Header="Test" Binding="{Binding Path=Datum}"></DataGridTextColumn>
            </DataGrid.Columns>     
        </DataGrid>
        
        
    </Grid>
</Window>


namespace Urlaube.ViewModel
{
    
    public class ViewModelUrlaubstage
    {
        public Urlaubsdaten Urlaubsdaten{get; set;}
        public List<Urlaubsdaten> ListUrlaubsdaten = new List<Urlaubsdaten>();

        public ViewModelUrlaubstage()
        {
            this.Urlaubsdaten = new Urlaubsdaten();
            this.Urlaubsdaten.Tag = "Mittwoch";
            this.ListUrlaubsdaten.Add(new Urlaubsdaten {Tag= "mittwoch"});
        }
    }
}

Urlaubsdaten findet er bei ItemSource aber die ListUrlaubsdaten nicht???

1.040 Beiträge seit 2007
vor 8 Jahren

ListUrlaubsdaten muss eine Property sein, im Moment ist es ein Feld.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Ok - jetzt habe ich mein Projekt abgeschossen - lässt sich nicht mehr öffnen...

Wie muss ich das bei der List genau setzten?

        public List<Urlaubsdaten> ListUrlaubsdaten
        {
            get { return ListUrlaubsdaten; }
            set { ListUrlaubsdaten = value; } {

Habe es so geschrieben und mein Projekt geht nich mehr auf 🙁

1.040 Beiträge seit 2007
vor 8 Jahren

Es ist egal welchen Datentyp deine Property hat, die Herangehensweise ist immer gleich. Bei der Property "Urlaubsdaten" hast du es doch auch hinbekommen...

[FAQ] Wie finde ich den Einstieg in C#?

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Sorry irgendwo habe ich hier einen Fehler gemacht!!

Es funktioniert 👍

5.299 Beiträge seit 2008
vor 8 Jahren

Ok - jetzt habe ich mein Projekt abgeschossen - lässt sich nicht mehr öffnen... guggemol https://www.vb-paradise.de/index.php/Thread/57189-solutionexplorer-opensource/
Damit kann man mit 1 Klick ein Backup machen. Und wenn Daten-Dateien im Projekt eingebunden sind, werden die auch mit-gezippt.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Hatte natürlich ein Backup - wusste aber nicht warum es einfach nicht aufging..

ABER jetzt bin ich beim gleichen Status wie oben.

Wie bekomme ich jetzt diese Combobox???

1.040 Beiträge seit 2007
vor 8 Jahren

Welcher Status, welche Combobox? ?(

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Ursprüngliche Frage warum ich überhaupt dieses Thema eröffnet habe 😁 👅

Aber ich schaue es mir mal an.

DANKE ihr habt mir sehr geholfen - ich frage natürlich wieder!!

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

So gleich noch ne Frage.

Habe davor mein Datagrid ja so befüllt - Ok das befüllen ist jetzt klar.


        private void btnUebernehmen_Click(object sender, RoutedEventArgs e)
        {

            List<UrlaubsDaten> UrlaubsDatenDataGrid = new List<UrlaubsDaten>();
            foreach (DateTime d in CalVon.SelectedDates)
            {
                string EnglWochentag = d.DayOfWeek.ToString();
                UrlaubsDaten Wochentag = new UrlaubsDaten();
                string AutWochentag = Wochentag.WoTagRename(EnglWochentag);

                UrlaubsDatenDataGrid.Add(new UrlaubsDaten { Datum = d, Tag = AutWochentag });
            }
            dgrTage.ItemsSource = UrlaubsDatenDataGrid;

        }

Aber das auslesen aus dem Calendar passiert doch weiterhin im Codebehind oder?
Oder kann ich eine Spalte dom Datagrid an den Calendar binden?

5.299 Beiträge seit 2008
vor 8 Jahren

Jetzt unterbrich mal das Weiter-Entwickeln deines Anwendungsfalles, und befasse dich ganz grundsätzlich mit dem MVVM-Pattern.
Ansonsten wird das immer gurkiger, was du da treibst.

Das gezeigte Click-Event sollte niemals so gecodet werden, sondern man hätte ein DelegateCommand im Viewmodel, an welches der Xaml-Button sein Command bindet.

probiermal, ob du bei https://www.vb-paradise.de/index.php/Thread/115475-MVVM-Anwendungs-Struktur/?postID=1005812#post1005812
durchsteigst - zur Not müssteste dir das PersonList-Projekt halt nach c# übersetzen.
Das Helpers-Projekt kann sogar in vb.net bleiben, man kann beide Sprachen durchaus in einer Solution zusammenbinden.

Oder halt bis morgen warten, dann sollte ich den Sample-Code selbst übersetzt haben.

Oder such dir andere MVVM-Tuts, aber hör möglichst auf mit CodeBehind - du gewöhnst dir hundsmiserablen Stil an.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Ja aber ich lese nur noch statt zu programmieren...

Das mein erster WPF-Code - hier alles gleich richtig zu machen ist nicht möglich.

Würde gerne diese Programm halbwegs zum laufen bringen. Verbessern kann ich es doch dann immer noch!?!

Nur war ich am Anfang mit dem Code-Behind weiter als ich jetzt bin bzw. hatte ich das in 10 Minuten und hier Wochen..

Eigentlich möchte ich ja nur einen Datagrid bei dem ich auch etwas erfassen kann.. mehr ist es nicht bzw. mache ich sonst alles auf der Datenbank (eher meine Welt).

5.299 Beiträge seit 2008
vor 8 Jahren

Würde gerne diese Programm halbwegs zum laufen bringen. Verbessern kann ich es doch dann immer noch!?! Halte ich zumindest für einen Fehlschluss.
Ist die Basis eines Programms verfehlt, so kann man es nicht verbessern.
Man kann nur den Zeitpunkt hinauszögern, wann man es doch verwerfen wird, um nochmal neu und auf solider Basis anzufangen.

Der frühe Apfel fängt den Wurm.

M
matte Themenstarter:in
60 Beiträge seit 2014
vor 8 Jahren

Man kann nur den Zeitpunkt hinauszögern, wann man es doch verwerfen wird, um nochmal neu und auf solider Basis anzufangen.

Dann aber mit mehr Erfahrung und Kenntnis 😄.
Finde ich bei so einem kleinen Pojekt jetzt wirklich nicht sehr schlimm.

Nur irgendwie kommt man nicht weiter...