Entwickler-Ecke

WPF / Silverlight - Zuweisung von Variablen an Kalender+Benutzerspeichern


Codemaster111 - Mo 17.08.20 19:21
Titel: Zuweisung von Variablen an Kalender+Benutzerspeichern
Hallo!
Ich bin ein kompletter Neuling in C# und in WPF!
Hier eine kleine Frage die ihr Programmierpros sicher leicht lösen könnt.
Ich bitte euch mit Codebeispielen zu antworten und die komplette Lösung zu verraten.
Danke schon mal im voraus! :D
Ich arbeite an einem Kalender.
Meine Probleme:

:!: 1. Der Benutzer soll einen Termin erstellen können, wenn er den Button Add Termin klickt öffnet sich ein
neues Fenster dort kann er dann die Daten des Termins eingeben. Mein Problem hierbei ist nicht, dass
die Eingaben in Variablen gespeichert werden können, sondern dass ich nicht weiß wie diese Variablen
an den Kalender gebunden werden, sodass dieser etwas damit anfangen kann.
Hier die Codes:
Main Window.xaml:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
  <Window x:Class="Kalender.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:Kalender"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="400">
    <StackPanel Margin="422,0,91,-0.333">
        <Calendar  x:Name="cldSample" Height="178" SelectionMode="MultipleRange" Margin="-362,0,100,0" />
        <Button  Name="AddTermin" Height="30" Margin="-326,0,137,0" Content="Add Termin" FontSize="20" Click="AddTerminClick"/>
    </StackPanel>
</Window>

Main Window.xaml.cs:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace Kalender
{
    /// <summary>
    /// Interaktionslogik für MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        void AddTerminClick(object sender, RoutedEventArgs e)
        {
            Window1 w = new Window1();
            w.Show();
        }
    }
}

Window1.xaml:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
<Window x:Class="Kalender.Window1"
        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:Kalender"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800">
    <StackPanel Orientation="Vertical">
        <TextBlock FontSize="30" Margin="262,0,0.333,0">Add your Termin here!</TextBlock>
        <StackPanel Orientation="Horizontal">
            <Label FontSize="25" Width="84" Content="Name:"/>
            <TextBox  Name="Name1" Height="41" Margin="204,0,195.333,0" Width="215" FontSize="20"/>
        </StackPanel>

        <Label Height="41" Margin="310,0,0.333,0" Content="Von:" FontSize="25"/>
        <StackPanel Orientation="Horizontal" Margin="111,0,0.333,0">
            <Label Content="Tag:" Width="45" FontSize="20"/>
            <TextBox Width="121" Name="TagVon1"></TextBox>
            <Label Content="Monat:" Width="73" FontSize="20"/>
            <TextBox Width="121" Name="MonatVon1"></TextBox>
            <Label Content="Jahr:" Width="49" FontSize="20"/>
            <TextBox Width="121" Name="JahrVon1"></TextBox>
        </StackPanel>
        <Separator FontSize="50" Height="85" Margin="0,2,0.333,2"></Separator>
        <Label Height="41" Margin="310,0,0.333,0" Content="Bis:" FontSize="25"/>
        <StackPanel Orientation="Horizontal" Margin="111,0,0.333,0">
            <Label Content="Tag:" Width="45" FontSize="20"/>
            <TextBox Width="121" Name="TagBis1"></TextBox>
            <Label Content="Monat:" Width="73" FontSize="20"/>
            <TextBox Width="121" Name="MonatBis1"></TextBox>
            <Label Content="Jahr:" Width="49" FontSize="20"/>
            <TextBox Width="121" Name="JahrBis1"></TextBox>
        </StackPanel>
        <Separator FontSize="20" Height="35" Margin="0,2,0.333,2"/>
        <Button Height="44" Margin="243,0,260.333,0" FontSize="25" Click="AddTerminClick1">Add Termin</Button>
    </StackPanel>
</Window>

Window1.xaml.cs:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Kalender
{
    /// <summary>
    /// Interaktionslogik für Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
        void AddTerminClick1(object sender, RoutedEventArgs e)
        {

        }
        void Calender()
        {
            String Name = Name1.Text;
            int TagVon = Convert.ToInt32(TagVon1.Text);
            int MonatVon=Convert.ToInt32(MonatVon1.Text);
            int JahrVon= Convert.ToInt32(JahrVon1.Text);

            int TagBis=Convert.ToInt32(TagBis1.Text);
            int MonatBis=Convert.ToInt32(MonatBis1.Text);
            int JahrBis=Convert.ToInt32(JahrBis1.Text);

        }

    }
}


:!: 2.Problem:
Wie erreiche ich, dass das Programm wenn es geschlossen wird die Daten "behält" und nicht bei einer erneuten Öffnung des Programms alles wieder "vergessen" wurde ?

Moderiert von user profile iconTh69: XML-Tags hinzugefügt
Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Mo 17.08.20 19:45

Hallo und :welcome:

Codemaster111 hat folgendes geschrieben:
Ich bitte euch mit Codebeispielen zu antworten und die komplette Lösung zu verraten.

Sorry, aber so funktioniert dieses (und auch jedes andere) Forum nicht!

Aber zu deinen konkreten Fragen:
1. Deine 2. Window-Klasse sollte die Werte als Eigenschaften (engl. properties) bereitstellen, so daß die aufrufende Window-Instanz auf diese Werte zugreifen kann (am einfachste, wenn du den Dialog mittels w.ShowDialog() modal aufrufst und direkt dahinter auf die Eigenschaften zugreifst).
Generell kann ich dir hierfür auch meinen Artikel Kommunikation von 2 Forms [https://entwickler-ecke.de/topic_Kommunikation+von+2+Forms_117789.html] empfehlen (der auch unter WPF anwendbar ist).

Für ein kleines Projekt mag diese Vorgehensweise noch funktionieren, aber du solltest zwingend bei WPF mit MVVM [https://de.wikipedia.org/wiki/Model_View_ViewModel] (d.h. u.a. mit "Data Binding") arbeiten, ansonsten wird der Code immer komplizierter und fehleranfälliger.
Wenn du genereller Programmieranfänger bist, dann solltest du evtl. erst einmal die Grundlagen anhand einer Konsolenapplikation oder mittels Windows Forms lernen.

2. Dazu mußt die Daten extern abspeichern (z.B. in Dateien oder einer Datenbank). Du solltest dir dafür auch ein Datenmodell anlegen, dann könntest du dieses z.B. serialisieren (s. Mit XmlSerializer Objekte als XML speichern und laden [https://entwickler-ecke.de/topic_Mit+XmlSerializer+Objekte+als+XML+speichern+und+laden_64947.html]).


Codemaster111 - Di 18.08.20 09:03

Danke!
Aber eine Frage bleibt noch. Wozu soll ich solche Foren sonst benutzen?


Th69 - Di 18.08.20 10:37

Wenn du konkrete Fragen hast (so wie deine beiden bisherigen), dann werden wir versuchen, sie zu beantworten - aber (Haus-)Aufgaben machen wir nicht.

Außerdem sind viele, ähnliche Fragen schon mal gestellt worden, d.h. die Foren kannst du auch für deine eigenen Suchen benutzen.