我的“应用程序”有一个 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
事件。我想让每个单元格上的样式用黄色勾勒出单元格 if IsMinimized
is 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
属性以触发它。
注意: 我不能使用验证规则,因为用户可以输入非最小值。