在DataGrid
中,我需要应用基于在数据上下文中实现的特定条件的样式。但它必须仅应用于第一列的单元格。
由于允许用户对列进行重新排序,我不知道哪一个是第一个。所以我尝试在CellStyle
级别实现它,条件是DisplayIndex
:
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="0" />
我把它放入一个MultiDataTrigger中,条件是数据,即:
<Condition Binding="{Binding IsInEvidence}" Value="False" />
在我的行级视图模型中,IsInEvidence
是bool
属性。如果我只保留此项,它会正常工作,但它会应用于所有单元格。
<DataGrid Items={Binding Items}/>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsInEvidence}" Value="False" />
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="0" />
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Yellow"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<!-- Column defintions and so on -->
</DataGrid>
将Condition
绑定更改为使用RelativeSource={RelativeSource Self}
,然后它就可以工作了。
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="0"/>