Hallo zusammen!
Ich schon wieder. In den letzten Tagen wurde mein Testprojekt um ein paar Funktionen erweitert. Nun ist der Hintergrund des Datagrid und die Formatierung der Zellen dran. Da steh ich leider wieder aufm Schlauch.
Um an die einzelnen Spalten zu gelangen, sind diese nun im XAML angelegt. Das DataGrid ist nach wie vor an mein ICollectionView gebunden, das aus einer ObservableCollection gespeist ist. Der Textblock der Spalten ist an das jeweilige Property gebunden. und dann wollte ich den Background an eine neue Klasse binden, die gleich groß ist wie die ObervableCollection. So stünde für jede Zelle ein Wert für die Hintergrundfarbe bereit. Aber wie kann man sich dort an eine andere Klasse binden, als die fürs DataGrid?
1. Gehe ich mit der Deklaration der Spalten im XAML bei meinem Projekt überhaupt den richtigen Weg, oder geht's auch einfacher?
2. Wie bindet man jetzt eine 2. Klasse an den Background, oder sollte man die Farbwerte in die Datenklasse mit einbinden?
3. Wenn im nächsten Schritt dann Datatemplates für einzelne Spalten dazu kommen, muss ich dann die Spalten im XAML deklarieren?
Klasse Hintergrund
Spoiler anzeigen
Code behind
Spoiler anzeigen
XAML
Spoiler anzeigen
P.S. leider sind die Spalten jetzt nicht mehr durch Klicken auf den Header sortierbar. Auch editieren lassen sie sich nicht mehr...
Gruß
eddi
Ich schon wieder. In den letzten Tagen wurde mein Testprojekt um ein paar Funktionen erweitert. Nun ist der Hintergrund des Datagrid und die Formatierung der Zellen dran. Da steh ich leider wieder aufm Schlauch.
Um an die einzelnen Spalten zu gelangen, sind diese nun im XAML angelegt. Das DataGrid ist nach wie vor an mein ICollectionView gebunden, das aus einer ObservableCollection gespeist ist. Der Textblock der Spalten ist an das jeweilige Property gebunden. und dann wollte ich den Background an eine neue Klasse binden, die gleich groß ist wie die ObervableCollection. So stünde für jede Zelle ein Wert für die Hintergrundfarbe bereit. Aber wie kann man sich dort an eine andere Klasse binden, als die fürs DataGrid?
1. Gehe ich mit der Deklaration der Spalten im XAML bei meinem Projekt überhaupt den richtigen Weg, oder geht's auch einfacher?
2. Wie bindet man jetzt eine 2. Klasse an den Background, oder sollte man die Farbwerte in die Datenklasse mit einbinden?
3. Wenn im nächsten Schritt dann Datatemplates für einzelne Spalten dazu kommen, muss ich dann die Spalten im XAML deklarieren?
Klasse Hintergrund
VB.NET-Quellcode
- Imports System.ComponentModel 'nötig für INotifyPropertyChanged
- Imports System.Runtime.CompilerServices
- Public Class Hintergrund
- Implements INotifyPropertyChanged 'benachrichtigt die Oberfläche (View) bei Änderung eines Propertys (Datendings)
- Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged 'wird automatisch bei der Implementierung des INotifyPropertyChanged eingefügt
- Private Sub raisepropertychanged(<CallerMemberName> Optional ByVal prop As String = "") 'wird bei Änderung in den Propertys aufgerufen
- RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(prop))
- End Sub
- Public Sub New() 'nicht löschen! zum Speichern und Laden nötig
- End Sub
- Public Sub New(Farbe As Brush)
- End Sub
- Private _farbe As Brush
- Public Property Farbe As Brush
- Get
- Return _farbe
- End Get
- Set(value As Brush)
- _farbe = value
- raisepropertychanged()
- End Set
- End Property
- End Class
Code behind
VB.NET-Quellcode
- Private _hintergrundfarbe As ObservableCollection(Of Hintergrund)
- Public Property Hintergrundfarbe As ObservableCollection(Of Hintergrund)
- Get
- Return _hintergrundfarbe
- End Get
- Set(value As ObservableCollection(Of Hintergrund))
- _hintergrundfarbe = value
- raisepropertychanged()
- End Set
- End Property
- Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
- Hintergrundfarbe = New ObservableCollection(Of Hintergrund)
- Hintergrundfarbe.Add(New Hintergrund(Brushes.Red))
- Hintergrundfarbe.Add(New Hintergrund(Brushes.Red))
- Hintergrundfarbe.Add(New Hintergrund(Brushes.Red))
- Hintergrundfarbe.Add(New Hintergrund(Brushes.Red))
- Me.DataContext = Me
- End Sub
XAML
XML-Quellcode
- <Window x:Class="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:Databinding_mit_View02"
- mc:Ignorable="d"
- Title="MainWindow" Height="600" Width="800">
- <Grid>
- <Grid.RowDefinitions>
- <RowDefinition/>
- <RowDefinition Height="120"/>
- </Grid.RowDefinitions>
- <DataGrid x:Name="Timer_DataGrid" ItemsSource="{Binding TimerView}" AutoGenerateColumns="False" CanUserSortColumns="True">
- <DataGrid.Columns>
- <DataGridTemplateColumn Header="EINS">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Startzeit}" Background="{x:Static Brushes.Red}"/>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="ZWEI">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Endzeit}" Background="{Binding Hintergrunfarbe}"/>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="DREI">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <TextBlock Text="{Binding Dateiname}" />
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- </DataGrid.Columns>
- </DataGrid>
P.S. leider sind die Spalten jetzt nicht mehr durch Klicken auf den Header sortierbar. Auch editieren lassen sie sich nicht mehr...
Gruß
eddi