En mi código XAML, quiero establecer el Backgroundcolor de cada fila, según un valor del objeto en una fila específica. Tengo una ObservableCollectionde z, y cada zuna tiene una propiedad llamada State. Empecé con algo como esto en mi DataGrid:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background"
Value="{Binding z.StateId, Converter={StaticResource StateIdToColorConverter}}"/>
</Style>
</DataGrid.RowStyle>
Este es un enfoque incorrecto porque x no es una propiedad en mi clase ViewModel.
En mi clase ViewModel tengo una ObservableCollection<z>que es la ItemsSourcede esto DataGridy una SelectedItemde tipo z.
Podría vincular el color a SelectedItem, pero esto solo cambiará una fila en el DataGrid.
¿Cómo puedo, en función de una propiedad, cambiar este color de fondo de filas?
wpf
xaml
wpfdatagrid
Tobias Moe Thorstensen
fuente
fuente

'State' property not found on 'object' ''z' (HashCode=7162954)'. BindingExpression:Path=State; DataItem='z' (HashCode=7162954); target element is 'DataGridRow' (Name=''); target property is 'NoTarget' (type 'Object')es posible que no encuentre el Estado de la propiedad cuando mi entidad tiene esto y mi base de datos muestra el Estado como una columna?z.State.enumvalor. Esta respuesta en StackOverflow me ayudó con eso.publicLo mismo se puede hacer sin
DataTriggertambién:<DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" > <Setter.Value> <Binding Path="State" Converter="{StaticResource BooleanToBrushConverter}"> <Binding.ConverterParameter> <x:Array Type="SolidColorBrush"> <SolidColorBrush Color="{StaticResource RedColor}"/> <SolidColorBrush Color="{StaticResource TransparentColor}"/> </x:Array> </Binding.ConverterParameter> </Binding> </Setter.Value> </Setter> </Style> </DataGrid.RowStyle>Dónde
BooleanToBrushConverterestá la siguiente clase:public class BooleanToBrushConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (value == null) return Brushes.Transparent; Brush[] brushes = parameter as Brush[]; if (brushes == null) return Brushes.Transparent; bool isTrue; bool.TryParse(value.ToString(), out isTrue); if (isTrue) { var brush = (SolidColorBrush)brushes[0]; return brush ?? Brushes.Transparent; } else { var brush = (SolidColorBrush)brushes[1]; return brush ?? Brushes.Transparent; } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }fuente
En XAML, agregue y defina una propiedad RowStyle para DataGrid con el objetivo de establecer el fondo de la fila en el color definido en mi objeto de empleado.
<DataGrid AutoGenerateColumns="False" ItemsSource="EmployeeList"> <DataGrid.RowStyle> <Style TargetType="DataGridRow"> <Setter Property="Background" Value="{Binding ColorSet}"/> </Style> </DataGrid.RowStyle>Y en mi clase de empleado
De esta manera, cada fila del DataGrid tiene el color de fondo de la
ColorSetpropiedad de mi objeto .fuente