WPF DataGrid - 基于复杂DataTable的单元样式

时间:2013-10-02 21:09:58

标签: c# wpf binding datagrid datatable

我的“应用程序”有一个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事件。如果IsMinimizedFalse,我希望每个单元格上的样式勾勒出黄色单元格,否则没有轮廓。

我已经能够获得最初的黄色轮廓,但是当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}}属性来触发它。

备注: 我无法使用验证规则,因为用户可以输入非最小化值。

0 个答案:

没有答案