Laden...

Wie kann man bei einem dynamisch erzeugten DataGrid die Cellcolor ändern?

Erstellt von C#bass vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.268 Views
C
C#bass Themenstarter:in
39 Beiträge seit 2014
vor 8 Jahren
Wie kann man bei einem dynamisch erzeugten DataGrid die Cellcolor ändern?

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???

W
955 Beiträge seit 2010
vor 8 Jahren

Hi,

  1. Du könntest ViewModels statt der DataTable vewenden die dann Properties für die Farbe besitzen.

  2. Du könntest Stile definieren und dann über das ResourceDictionary des Controls darauf zugreifen.


            var brd = new Border();
            brd.Style = (Style)myControl.Resources["ElementBorderStyle"];

I
1.739 Beiträge seit 2005
vor 8 Jahren

Das Interface heisst IValueConverter.
Schreib einen Converter und binde ihn an die Property.

C
C#bass Themenstarter:in
39 Beiträge seit 2014
vor 8 Jahren

@witte kannst du erklären wie du das mit dem ViewModels meinst ? Vielleicht ein Beispiel ? Danke im Voraus

W
955 Beiträge seit 2010
vor 8 Jahren

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.