我的“应用程序”有一个DataGrid,其源代码是DataTable。 DataTable中填充了以下对象:
public class DataWrapper : INotifyPropertyChanged
{
public String Value { get; set {...} } // Changes fire PropertyChangeEvent
public bool IsMinimized { get; set {...} } // Changes fire PropertyChangeEvent
// Other code to implement INotifyPropertyChanged
}
这里的一般想法是Value
属性可以是“完全”最小化形式,我们可以通过查看IsMinimized
属性来查看它是否属于设置在其他地方。
当用户修改DataGrid中的单元格时,对Value
的更改会执行一项检查,确定该值是否已最小化,然后设置IsMinimized
属性,该属性又会触发PropertyChanged
事件。如果IsMinimized
为False
,我希望每个单元格上的样式勾勒出黄色单元格,否则没有轮廓。
我已经能够获得最初的黄色轮廓,但是当Value
属性被修改时,我无法让绑定刷新。我将此归因于我在绑定中处理DataRowView
这一事实。作为参考,这里是一个单元格样式的片段:
<Style TargetType="{x:Type DataGridCell}" x:Key="GridCellStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid Background="{TemplateBinding Background}">
<ContentPresenter VerticalAlignment="Center" />
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource CellIsMinimizedConverter}}" Value="False" />
<Setter Property="BorderBrush" Value="Yellow" />
<Setter Property="BorderThickness" Value="1" />
</DataTrigger>
</Style.Triggers>
</Style>
转换器CellIsMinimizedConverter
用于根据IsMinimized
提取当前列的DataRowView
属性,但我不确定如何更改IsMinimized
1}}属性来触发它。
备注: 我无法使用验证规则,因为用户可以输入非最小化值。