Hallo,
ich habe ein DataGrid dessen ItemSource ich eine DataTable zuweise. Anschließend wird das DataGrid zu einem StackPanel geadded.
DataGrid grid = new DataGrid();
grid.ItemsSource = table.DefaultView;
Wie kann ich jetzt nachträglich die Fraben der DataGrid Zellen ändern???
Hi,
Du könntest ViewModels statt der DataTable vewenden die dann Properties für die Farbe besitzen.
Du könntest Stile definieren und dann über das ResourceDictionary des Controls darauf zugreifen.
var brd = new Border();
brd.Style = (Style)myControl.Resources["ElementBorderStyle"];
Das Interface heisst IValueConverter.
Schreib einen Converter und binde ihn an die Property.
@witte kannst du erklären wie du das mit dem ViewModels meinst ? Vielleicht ein Beispiel ? Danke im Voraus
Na du bindest keine Datatable an das Grid sondern eine IEnumerable<MyViewModel>. MyViewModel nimmt die Informationen einer Datatablezeile auf.
public class MyViewModel
{
public String Name { get; set; }
public DateTime? Termin { get; set; }
public String TypFarbe
{
get {
if (!Termin.HasValue) return "DarkSalmon";
return "LightSkyBlue";
}
}
}
und dann vllt
<DataGrid ItemsSource="{Binding Termine}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="Auto" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding TypFarbe}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Termin, StringFormat=d}" Header="Datum" Width="Auto" >
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding TypFarbe}" />
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Wenn du die Objekte im Datagrid ändern willst sollte es eine ObservableCollection<MyViewModel> werden und die Objekte sollten INotifyPropertyChanged implementieren.