DataGrids eigenen sich hervorragend zum Anzeigen von Daten. Hier zeige ich ein paar Beispiele, wie Ihr in WPF mit dem DataGrid Objekt arbeiten könnt.
Datenquelle (ItemsSource) zuweisen
Das Zuweisen einer Quelle für das DataGrid Objekt kann über XAML oder im Code (code behind) erfolgen.
ItemsSource via XMAL
Je nachdem wo sich die zu bindende Quelle befindet, kann folgendes Beispiel abweichen. Im aktuellen Beispiel ist die Quelle eine ObservableCollection vom Typ User.
ItemsSource="{Binding Path=Users, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Page}}
#region PUBLIC_PROPERTIES public ObservableCollection<User> Users { get; set; } #endregion
Benutzerdefinierte Spalten
Spalte zum Anzeigen von Bildern
Um eine Spalte zu erstellen, welches ein Bild anzeigt, muss ein neues DataGridTemplateColumn erstellt werden.
Ein Beispiel finden Sie folgend:
<DataGridTemplateColumn Header="Image" Width="80"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Image Source="{Binding Path=Image.Source}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
Wenn Ihr Objekt nicht direkt das Bild enthält, so können Sie dies auch mit einem Converter lösen. Siehe Beispiel:
public class UriToImageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { Uri i = value as Uri; if (i != null) BitmapImage im = new BitmapImage(); try { im.BeginInit(); im.UriSource = i; im.EndInit(); } catch(Exception) { return null; } return im; else return null; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } }
Implementieren Sie dann den Converter in Ihrer XAML Struktur.
<Image Source="{Binding Path=Sparepart.Image, Converter={StaticResource UriToImageConverter}, UpdateSourceTrigger=Default}" />
<!-- Im Header einbinden --> <Page.Resources> <local:UriToImageConverter x:Key="UriToImageConverter"/> </Page.Resources>
Textspalten
Normale Spalten, welche einen Text anzeigen, könnt Ihr wie folgt erstellen:
<DataGridTextColumn Header="Vorname" Binding="{Binding Firstname}"/> <DataGridTextColumn Header="Nachname" Binding="{Binding Lastname}"/>
Dropdown Spalten (ComboBox)
Wenn Ihr eine Auswahlbox (ComboBox) als Spalte einfügen wollt, so könnt Ihr dieses Beispiel verwenden.
<DataGridComboBoxColumn Header="OE" SelectedValueBinding="{Binding OE}" > <DataGridComboBoxColumn.ElementStyle> <Style TargetType="{x:Type ComboBox}"> <Setter Property="ItemsSource" Value="{Binding Path=OEs, RelativeSource={RelativeSource AncestorType={x:Type Page}}}" /> </Style> </DataGridComboBoxColumn.ElementStyle> <DataGridComboBoxColumn.EditingElementStyle> <Style TargetType="{x:Type ComboBox}"> <Setter Property="ItemsSource" Value="{Binding Path=OEs, RelativeSource={RelativeSource AncestorType={x:Type Page}}}" /> </Style> </DataGridComboBoxColumn.EditingElementStyle> </DataGridComboBoxColumn>
Kommentar abgeben?