Livechart Daten anzeigen lassen C#?
Ich habe eine Tabelle mit Wetterdaten. Die Tabelle besteht aus einer ID, der Temperatur und dem Datum. Ich möchte die Temperaturdaten und das jeweilige Jahr in einem Liniendiagramm ausgeben lassen. Ich möchte über ein Dropdown-Menü oder über eine Textbox die jeweilige ID auswählen können, damit für die Temperatur und das Jahr die jeweilige ID im Liniendiagramm angezeigt wird. wie mache ich das? Ich möchte das Ganze in eine extra LiveChart Klasse schreiben und nicht in die MainWindow Klasse. Das Projekt, der Kontext und die Migration wurden bereits erstellt (Entity Framework Core). Dies ist das Liniendiagramm, das ich verwenden möchte
1 Antwort
Nutze MVVM. Leg dir zuerst einmal eine Klasse (dein ViewModel) an und setze dieses als Datenkontext für dein View. Implementiere danach das INotifyPropertyChanged-Interface.
<Window.DataContext>
<local:YourViewModelClass />
</Window.DataContext>
In der Klasse brauchst du ein Property für die verfügbaren IDs, ein Property für die aktuell gewählte ID und die Properties für das Diagramm, die sich ändern können (SeriesCollection, u.ä.). Wenn ihre Werte über das Property gesetzt werden, sollten sie die PropertyChanged-Methode aufrufen, um das View über die Datenänderung zu informieren.
Im Setter für die aktuell gewählte ID wiederum werden die neuen Daten geholt und die Diagramm-Properties gesetzt. Am besten lagert man diese Operation in eine eigene Methode aus.
Für das View brauchst du dann noch eine ComboBox und den Diagramm-Container. Beide Komponenten werden an die Properties des ViewModels gebunden.
<StackPanel>
<ComboBox ItemsSource="{Binding Ids}" SelectedValue="{Binding CurrentId}" SelectedValuePath="Content" />
<lvc:CartesianChart Series="{Binding SeriesCollection}">
<!-- etc. ... -->
</lvc:CartesianChart>
</StackPanel>
Die Window-Klasse bleibt übrigens im Anfangszustand, bzw.:
public partial class MainWindow : Window
{
public MainWindow() => InitializeComponent();
}
Das Einholen der Daten aus der Datenbank gehört in eine eigene Klasse. Das ViewModel kann eine Instanz für diese bekommen, um eine Datenanfrage vornehmen zu können.
PS.: Klassennamen beginnen nach üblicher Konvention mit einem Großbuchstaben. Um Ordnung im Projekt zu halten, sollte dieser Stil einheitlich verfolgt werden.