У меня есть вопрос. У меня есть таблица с 4 столбцами, 4-й столбец - это столбец состояния, и я хотел покрасить ячейки этого 4-го столбца в соответствии со статусом, поэтому я попробовал что-то вроде:
<DataGrid.CellStyle>
<Style TargetType = "{x:Type DataGridCell}">
<Setter Property = "BorderBrush" Value = "#bababa" />
<Setter Property = "BorderThickness" Value = "1" />
<Setter Property = "Foreground" Value = "White" />
<Style.Triggers>
<DataTrigger Binding = "{Binding DataCollectionStatus}" Value = "{x:Static collectionStatus:ModuleDataCollectionStatus.Collected}">
<Setter Property = "Background" Value = "Green" />
</DataTrigger>
<DataTrigger Binding = "{Binding DataCollectionStatus}" Value = "{x:Static collectionStatus:ModuleDataCollectionStatus.Collecting}">
<Setter Property = "Background" Value = "Orange" />
</DataTrigger>
<DataTrigger Binding = "{Binding DataCollectionStatus}" Value = "{x:Static collectionStatus:ModuleDataCollectionStatus.NotCollected}">
<Setter Property = "Background" Value = "Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Width = "100" Header = "Module type" Binding = "{Binding ModuleTypeAsString}" />
<DataGridTextColumn Width = "70" Header = "Rack ID" Binding = "{Binding RackIdAsString}" />
<DataGridTextColumn Width = "70" Header = "Slot no" Binding = "{Binding ModuleSlotAsString}" />
<DataGridTextColumn Width = "200" Header = "Status" Binding = "{Binding DataCollectionStatusAsString}" />
</DataGrid.Columns>
Ну, это частично работает, поскольку окрашивает все ячейки в соответствии со статусом. Я также пытался добавить стиль в DataGridTextColumn, но получаю сообщение о том, что не могу получить доступ к этим свойствам.
Могу ли я сделать цветные ячейки только в 4-м столбце?





Как и во всей сетке данных, есть свойство стиля ячейки, которое можно использовать для столбца сетки данных. Например:
<DataGridTextColumn Binding = "{Binding Title}">
<DataGridTextColumn.CellStyle>
<Style TargetType = "DataGridCell">
<Style.Triggers>
<Trigger Property = "IsSelected" Value = "True">
<Setter Property = "Background" Value = "{Binding bBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
Со сложной логикой, специфичной для этого места, может быть проще поддерживать инкапсуляцию этой логики в модели представления строк и «просто» возвращать кисть для привязки. Тогда представление не зависит от перечисления или чего бы то ни было. Затем некоторые люди утверждают, что принятие решения о представлении является обязанностью представления. Мое личное мнение заключается в том, что лучше всего то, что проще в обслуживании.